Closed
Bug 759124
Opened 12 years ago
Closed 12 years ago
Implement useCurrentView
Categories
(Core :: SVG, defect)
Core
SVG
Tracking
()
RESOLVED
FIXED
mozilla15
People
(Reporter: longsonr, Assigned: longsonr)
References
Details
(Keywords: dev-doc-needed)
Attachments
(1 file, 3 obsolete files)
12.76 KB,
patch
|
dholbert
:
review+
|
Details | Diff | Splinter Review |
No description provided.
Assignee | ||
Comment 1•12 years ago
|
||
We really need to get this in for 15 as zoomAndPan fragments can crash the browser without this.
Assignee: nobody → longsonr
Attachment #627720 -
Flags: review?(jwatt)
Assignee | ||
Comment 2•12 years ago
|
||
Attachment #627720 -
Attachment is obsolete: true
Attachment #627720 -
Flags: review?(jwatt)
Attachment #627721 -
Flags: review?(jwatt)
Comment 3•12 years ago
|
||
Comment on attachment 627721 [details] [diff] [review] update uuid too >-const PRUint16* >+const PRUint16 > nsSVGSVGElement::GetZoomAndPanProperty() const > { > void* valPtr = GetProperty(nsGkAtoms::zoomAndPan); > if (valPtr) { >- return reinterpret_cast<PRUint16*>(valPtr); >+ return reinterpret_cast<PRUint16>(valPtr); This doesn't compile for me -- GCC says: > nsSVGSVGElement.cpp:1434:45: error: cast from ‘void*’ to > ‘PRUint16 {aka short unsigned int}’ loses precision [-fpermissive] Presumably we actually want: return *reinterpret_cast<PRUint16*>(valPtr); (the same as it was before, but with a * at the beginning)?
Assignee | ||
Comment 4•12 years ago
|
||
Attachment #627721 -
Attachment is obsolete: true
Attachment #627721 -
Flags: review?(jwatt)
Attachment #628295 -
Flags: review?(jwatt)
Assignee | ||
Comment 5•12 years ago
|
||
(In reply to Daniel Holbert [:dholbert] from comment #3) > > Presumably we actually want: > return *reinterpret_cast<PRUint16*>(valPtr); > (the same as it was before, but with a * at the beginning)? Actually no, we don't want to dereference. Fortunately there's a uintptr_t that seems to fix this.
Assignee | ||
Comment 6•12 years ago
|
||
Attachment #628295 -
Attachment is obsolete: true
Attachment #628295 -
Flags: review?(jwatt)
Attachment #628296 -
Flags: review?(jwatt)
Assignee | ||
Updated•12 years ago
|
Attachment #628296 -
Flags: review?(dholbert)
Comment 7•12 years ago
|
||
> void
> SVGFragmentIdentifier::SaveOldZoomAndPan(nsSVGSVGElement *root)
> {
>- const PRUint16 *oldZoomAndPanPtr = root->GetZoomAndPanProperty();
>- if (!oldZoomAndPanPtr) {
>+ PRUint16 oldZoomAndPan = root->GetZoomAndPanProperty();
>+ if (oldZoomAndPan != nsIDOMSVGZoomAndPan::SVG_ZOOMANDPAN_UNKNOWN) {
> root->SetZoomAndPanProperty(root->mEnumAttributes[nsSVGSVGElement::ZOOMANDPAN].GetBaseValue());
> }
Previously, this was saying "if root doesn't have a ZoomAndPanProperty stored, then store its current attribute baseval there."
Now it seems to be saying "if root _has_ a (non-unknown) ZoomAndPanProperty stored, then store its current attribute baseval there."
So, I think this logic might've been unintentionally flipped (and I think the old logic made more sense)... I might be misunderstanding though.
Comment 8•12 years ago
|
||
Comment on attachment 628296 [details] [diff] [review] remove silly const Expanding on Comment 7 slightly -- so it looks like with the current patch, SaveOldZoomAndPan() will never actually end up saving anything, since we'll always fail the "if" check. It worries me a bit that we don't have any tests to verify our behavior on that... (assuming the current patch passes tests) Could you add a test for that? (In reply to Robert Longson from comment #5) > Actually no, we don't want to dereference. Fortunately there's a uintptr_t > that seems to fix this. (Righto -- I hadn't groked what was actually going on before & was just focusing on the compile error. uintptr_t looks like a reasonable solution.) > bool > SVGFragmentIdentifier::ProcessSVGViewSpec(const nsAString &aViewSpec, > nsSVGSVGElement *root) > { >@@ -103,16 +103,19 @@ SVGFragmentIdentifier::ProcessSVGViewSpe > const nsAString *preserveAspectRatioParams = nsnull; > const nsAString *zoomAndPanParams = nsnull; > > // Each token is a SVGViewAttribute > PRInt32 bracketPos = aViewSpec.FindChar('('); > CharTokenizer<';'>tokenizer( > Substring(aViewSpec, bracketPos + 1, aViewSpec.Length() - bracketPos - 2)); > >+ if (!tokenizer.hasMoreTokens()) { >+ return false; >+ } > while (tokenizer.hasMoreTokens()) { Nit: The "while(tokenizer.hasMoreTokens())" check is now guaranteed to be true when we first enter the loop, so this could now be converted to do { ... } while (tokenizer.hasMoreTokens()); to eliminate that unnecessary check. >diff --git a/content/svg/content/test/test_fragments.html b/content/svg/content/test/test_fragments.html >new file mode 100644 >--- /dev/null >+++ b/content/svg/content/test/test_fragments.html [...] >+ for (var i = 0; i < tests.length; i++) { >+ var test = tests[i]; >+ svg.setAttribute("src", src + "#" + test.svgFragmentIdentifier); >+ is(doc.rootElement.useCurrentView, test.valid, "Expected " + test.svgFragmentIdentifier + " to be " + (test.valid ? "valid" : "invalid")); That last line is pretty long -- wrap it so it's reasonably-sized. :) r=me with the above (& comment 7) addressed.
Attachment #628296 -
Flags: review?(dholbert) → review+
Assignee | ||
Comment 9•12 years ago
|
||
(In reply to Daniel Holbert [:dholbert] from comment #7) > > void > > SVGFragmentIdentifier::SaveOldZoomAndPan(nsSVGSVGElement *root) > > { > >- const PRUint16 *oldZoomAndPanPtr = root->GetZoomAndPanProperty(); > >- if (!oldZoomAndPanPtr) { > >+ PRUint16 oldZoomAndPan = root->GetZoomAndPanProperty(); > >+ if (oldZoomAndPan != nsIDOMSVGZoomAndPan::SVG_ZOOMANDPAN_UNKNOWN) { > > root->SetZoomAndPanProperty(root->mEnumAttributes[nsSVGSVGElement::ZOOMANDPAN].GetBaseValue()); > > } > > Previously, this was saying "if root doesn't have a ZoomAndPanProperty > stored, then store its current attribute baseval there." > > Now it seems to be saying "if root _has_ a (non-unknown) ZoomAndPanProperty > stored, then store its current attribute baseval there." > > So, I think this logic might've been unintentionally flipped (and I think > the old logic made more sense)... I might be misunderstanding though. It was unintentionally flipped. I'll be doing another patch to add currentView DOM support to the SVGSVGElement, I can add tests once I've done that but I don't think there's any way to test it automatically right now.
Comment 10•12 years ago
|
||
OK, that sounds fine. Thanks!
Assignee | ||
Updated•12 years ago
|
Attachment #628296 -
Flags: review?(jwatt)
Assignee | ||
Comment 11•12 years ago
|
||
Thanks for the review Daniel. https://hg.mozilla.org/integration/mozilla-inbound/rev/f9b479f90848
Flags: in-testsuite+
Assignee | ||
Updated•12 years ago
|
Target Milestone: --- → mozilla15
Assignee | ||
Updated•12 years ago
|
Keywords: dev-doc-needed
Comment 12•12 years ago
|
||
https://hg.mozilla.org/mozilla-central/rev/f9b479f90848
Status: NEW → RESOLVED
Closed: 12 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•