Closed
Bug 233636
Opened 21 years ago
Closed 21 years ago
GetClasses should have a better signature
Categories
(Core :: CSS Parsing and Computation, defect)
Core
CSS Parsing and Computation
Tracking
()
RESOLVED
FIXED
People
(Reporter: sicking, Assigned: dbaron)
References
Details
Attachments
(1 file, 2 obsolete files)
12.63 KB,
patch
|
sicking
:
review+
|
Details | Diff | Splinter Review |
It would be nice with a signature on nsIStyledContent didn't force us to copy
all the atoms into a new array. Unfortunatly that will force us to be consistent
with how we store the parsed classlist.
This should be the case once XUL and SVG is converted over to the new
attributecode though. However the classlist will then be stored either as an
atom or as an nsCOMArray<nsIAtom> so we'll will have to deal with that somehow.
Comment 1•21 years ago
|
||
It looks like the only place the return value is used is as input to
RuleHash::EnumerateAllRules
Perhaps we should just make this return a const nsAttrValue* pointing to the
internal attr value? The EnumerateAllRules code can do the little bit with
figuring out whether the value is an nsIAtom* or an nsCOMArray<nsIAtom>*....
Comment 2•21 years ago
|
||
Comment 3•21 years ago
|
||
Comment on attachment 141224 [details] [diff] [review]
Per conversation with sicking, this may be ok
The goal here is that when the nsHTMLValue thing dies the callers don't have to
care...
Attachment #141224 -
Flags: superreview?(dbaron)
Attachment #141224 -
Flags: review?(bugmail)
Reporter | ||
Comment 4•21 years ago
|
||
Ack, i just realized that this might not be doable in SVG. In SVG the .className
is an nsIDOMSVGAnimatedString which means that internally SVG might want to
store the class as an nsISVGValue rather then a nsIAtom or nsCOMArray<nsIAtom>.
However if the nsISVGValue internally stores the value as an nsIAtom and/or
nsCOMArray<nsIAtom> then we could still return a struct like
{ nsIAtom*, nsCOMArray<nsIAtom>* }
Though on the other hand, then the nsISVGValue might as well store an
nsAttrValue internally.
Alex, how does svg currently store the classlist, and how do you think you'll
store it in the future?
Assignee | ||
Updated•21 years ago
|
Attachment #141224 -
Flags: superreview?(dbaron) → superreview+
Reporter | ||
Comment 5•21 years ago
|
||
hrm, i could have sworn i added another comment here. Reposting as much as I can
remember:
I talked with Alex about how svg should store the classname(s) in order to
properly implement HasClass/GetClasses. Svg does indeed need to store the
classname as an nsISVGValue which will contain the parsed atoms.
However it could probably store the value however we want inside that
nsISVGValue. So an nsAttrValue would most likly work fine, in which case the
current patch is fine.
Alex let me know if that sounds ok with you. Otherwise we would have to make
GetClasses return a struct as said in my previous comment.
Comment 6•21 years ago
|
||
Attachment #141224 -
Attachment is obsolete: true
Updated•21 years ago
|
Attachment #141224 -
Flags: review?(bugmail)
Comment 7•21 years ago
|
||
Comment on attachment 143205 [details] [diff] [review]
Merged to tip
So sicking, could we make a decision here? Is this ok or do we want to go with
the struct?
Attachment #143205 -
Flags: review?(bugmail)
Reporter | ||
Comment 8•21 years ago
|
||
I'd still like to get alex input on this...
Comment 9•21 years ago
|
||
Sorry guys, I forgot all about this bug...
I talked to sicking and we agreed that the patch it is ok with SVG.
We'll need to expose an nsIDOMSVGAnimatedString interface for the class
attribute in SVG somehow, but that should be possible by statically or
dynamically wrapping the nsAttrValue with an appropriate SVG-specific class.
Reporter | ||
Comment 10•21 years ago
|
||
Comment on attachment 143205 [details] [diff] [review]
Merged to tip
>Index: content/base/src/nsAttrValue.h
>+ // Returns the atom at aIndex (0-based). Do not call this with
>+ // aIndex >= GetAtomCount().
>+ nsIAtom* GetAtomAt(PRInt32 aIndex) const;
This should probably be called |AtomAt| since it should never return nsnull.
(though admittedly i've been very poor with following this convention in this
class).
>Index: content/base/src/nsAttrValue.cpp
>+nsAttrValue::GetAtomAt(PRInt32 aIndex) const
>+{
>+ NS_PRECONDITION(aIndex >= 0, "Index must not be negative");
>+ NS_PRECONDITION(GetAtomCount() > 0, "GetAtomAt() called on an nsAttrValue with no atoms");
>+ NS_PRECONDITION(GetAtomCount() > aIndex, "aIndex out of range");
The middle precondition isn't strictly needed since if GetAtomCount() == 0 one
of the other preconditions will fail. Do as you want.
>+ if (Type() == eAtom) {
>+ return GetAtomValue();
>+ }
It'd be faster to do |BaseType() == eAtomBase| in that test.
With that, r=sicking
Attachment #143205 -
Flags: review?(bugmail) → review+
Comment 11•21 years ago
|
||
Attachment #143205 -
Attachment is obsolete: true
Reporter | ||
Comment 12•21 years ago
|
||
Comment on attachment 143426 [details] [diff] [review]
Updated to review comments
sweet
Attachment #143426 -
Flags: review+
Comment 13•21 years ago
|
||
Checked in.
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•