Closed Bug 234675 Opened 21 years ago Closed 21 years ago

[FIXr]flash movie is cut in 1.5 and 1.6

Categories

(Core Graveyard :: Plug-ins, defect, P2)

Tracking

(Not tracked)

RESOLVED FIXED
mozilla1.7beta

People

(Reporter: rx-updates, Assigned: bzbarsky)

References

()

Details

(Keywords: regression)

Attachments

(4 files)

User-Agent: Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040113 The page at http://dev.neomyz.com/skindemo.aspx show a single flash movie which can automatically change it's size based on the length of its content (it is a web poll). Mozilla 1.5 and newer displays such a flash movie incorrectly, causing it to offset itself inside it's rectangle which in the end causes it to appear cut on the top, or on the bottom (this changes with different polls). I did test this with Mozilla 1.2.1 and 1.4 and it worked fine, as it does with all other major browsers (Internet Explorer, Netscape 4.7 and 7.1, Opera 7.11, AOL 8.0, etc). It is only displayed incorrectly in Mozilla 1.5, 1.6.0.2004011308, and I have also tried the latest nightly build 1.7.0.2004021608 and it is displayed the same way (incorrectly). I have searched the older bugs and found a similar bug report at http://bugzilla.mozilla.org/show_bug.cgi?id=215497, but I am not sure if this is the same bug, although it seems to be, but the abovementioned bug report is about 6 months old and appears to be abandoned. I consider this to be a major bug and hope that it can be fixed in a reasonable time as it was working fine in previous versions of your browser (which I think has grown to be a great browser, btw). I can get in contact with our flash developer and provide you with details on how the internal size and positioning in the poll flash movies is calculated, I think that this could perhaps help us find out the source of this problem. PPLease let me know what should I do next / what do you think about this bug. Thanks in advance! Best regards, Radoslav Bielik Reproducible: Always Steps to Reproduce: The following lists some websites that are using our web poll. You can visit any of them to reproduce this bug. They contain various instances/skins of the web poll, which means that each one is cut in a different way: http://www.neomyz.com - web poll service provider http://www.topshop.sk/topshop/script/novinky.asp?kat=0&vyrobok=0 http://www.atstracts.org http://4cc.mosqito.net/ http://www.hollywoodvideo.com/movies/features/awards/04/awardspoll.aspx Actual Results: A flash movie is displayed incorrectly Expected Results: A movie is supposed to display correctly (uncut), try Internet Explorer 5 or newer, or Mozilla 1.4 or older ;)
This screenshot show Internet Explorer 6, Opera 7.11 (these two shows how the flash poll is displayed correctly) and Mozilla 1.6 (this one displays the flash poll moved too far to the top and thus cut).
At http://dev.neomyz.com/skindemo.aspx the <embed> in question is set to a height of 231, no? That's the height I'm seeing it here.... Is the plugin itself supposed to resize the <embed>? Or how does the auto sizing work?
(In reply to comment #2) > At http://dev.neomyz.com/skindemo.aspx the <embed> in question is set to a > height of 231, no? That's the height I'm seeing it here.... > Is the plugin itself supposed to resize the <embed>? Or how does the auto > sizing work? No, the "height" attribute of the <embed> tag is always calculated on the server side in the ASP.NET code which means that the resulting HTML code has always correct value of this, it is 231 pixels in case of this test poll. But since the size of the <embed> changes, the flash movie needs to position itself inside its rectangle, this is done in the ActionScript code in the flash movie. Perhaps it doesn't receive the correct values on which the calculation depends from the browser? I don't know the details of this, but I will ask our flash developer how this is done and post details here tomorrow (thursday). I will also ask him to create some kind of test movie which will show what exactly is causing the wrong positioning.
Yeah, more information on exactly what you guys are doing would be great.... 231px is far too short to contain the entire movie in this case....
(In reply to comment #4) > Yeah, more information on exactly what you guys are doing would be great.... > 231px is far too short to contain the entire movie in this case.... 231px is the exact height of the full movie (otherwise it would be displayed cut in other browsers too). I have trimmed the screenshot of the IE showing the poll, and it's height is 230px (I probably cut it an extra pixel of height accidentally), so the height is calculated and provided correctly in the HTML code. I will attach this screenshot for you to see, but unfortunately our flash developer is now sick, I hope he will be back in the office on thursday to discuss the resizing/positioning details with him.
All good. Just have him comment on this bug, please.
Attached image Correct appearance
This screenshot shows the correct appearance of the flash movie, and its approximate size (I have just cut it in MS Paint so the size of this picture is 150x230, and the size of the movie itself is 148x231).
I'm sorry for the delay but the Flash guy is still sick, so I won't be able to post further details before the next week. I will get back on Monday or Tuesday, and I hope that this problem will be solvable without too much hassle as soon as we have more information... :)
Hi, I think that we have identified the possible cause of this bug (well, I'm not 100% sure, but say 95% :). Mozilla 1.5 or higher just ignores the "salign" attribute of the <embed> tag. I have created a set of test files for you, and I will post them shortly as an attachment. This set contains a simple flash movie with source (both swf and fla files) which contains only a 200x200px green rectangle and nothing else. There are two HTML pages with this flash movie embedded surrounded by <hr> on top and bottom - test_center.html and test_top.html. The embed tag in both of them has the scale="noscale" attribute, which means that if the width/height attributes of the <embed> tag are different than the internal size of the flash movie, if won't be scaled/streched, but it's original size will be preserved. The width of the <embed> is 200px and height is 300px in both HTML files. In the test_center.html, the "salign" attribute is omitted, which results in the 200x200px flash movie being vertically centered in its 200x300px rectangle. The test_top.html contains the salign="t" attribute, which SHOULD result in the flash movie being vertically aligned to top of its 200x300px rectangle. The screenshots test_center_correct.jpg and test_center_top.jpg show the correct appearance and both were made with Mozilla 1.4, which is the last version to work correctly. If you test the HTML files in Mozilla 1.4, IE6.0 or Opera 7.11, you will get the correct appearance, however Mozilla 1.6 seems to ignore the salign attribute. Please let me know if you have enough information on thig bug or if you need further clarification. Thanks in advance!
This is a simple test case containing a flash movie with source, and two HTML test pages + screenshots showing correct appearance. It demonstrates incorrect handling of the salign attribute by Mozilla 1.6.
Hmm... salign is handled completely by the plugin, is it not? Having the testcase, helps a lot, yes. ;) The behavior on the test_top testcase changed between build 2003-07-21-05 and build 2003-07-22-22. The checkins in that range are: http://bonsai.mozilla.org/cvsquery.cgi?treeid=default&module=all&branch=HEAD&branchtype=match&dir=&file=&filetype=match&who=&whotype=match&sortby=Date&hours=2&date=explicit&mindate=2003-07-21+05%3A00%3A00&maxdate=2003-07-22+22%3A00%3A00&cvsroot=%2Fcvsroot And in fact, the specific checkin involved was the one to the HTML content sink. The upshot of that was that we started storing attributes in a different order (and giving them to the plugin in a different order as a result). And the particular testcase you posted breaks in a 1.4 build if I put the "salign" attribute of the <embed> anywhere before the "scale" attribute. So we have the following questions: 1) Should the behavior of the plugin depend on the order of the attributes on the <embed>? (I would say "no", but what do I know about plugins? ;) ). I'm not sure what the plugin API promises and whether salign is handled by the flash plugin itself of by the movie running in it. 2) Should we fix things so that the attributes are given to the plugin in the old order? (I'd say probably yes, even if the answer to the first question is "no"). sicking, just ccing you so you'll be aware of this issue... :(
This makes us pass the attributes to the plugin in the same order as we used to. It fixes all the testcases pointed to in this bug. At the same time, this is a pretty nasty hack. I don't like it one bit.
Peter, jst, sicking, peterv, any thoughts?
Hi Boris and thank you for a quick and detailed response! (In reply to comment #11) > So we have the following questions: > 1) Should the behavior of the plugin depend on the order of the attributes on > the <embed>? (I would say "no", but what do I know about plugins? ;) ). > I'm not sure what the plugin API promises and whether salign is handled by > the flash plugin itself of by the movie running in it. I think that the attribute is handled by the plugin, not by the movie itself, as I'm not aware if it is available to the movie (the test movie submitted above contains no scripting at all, only a green square). But as you say above, I would also say "no" - the order of attributes shouldn't be important to the plugin, although now it seems that the flash player plugin ignores the salign attribute until it doesn't find the scale attribute (and I would blame the flash plugin for incorrect handling of attributes). > 2) Should we fix things so that the attributes are given to the plugin in the > old order? (I'd say probably yes, even if the answer to the first question > is "no"). I would also say "yes", as there might be other flash movies or even other plugins that depend on this. I have tried your test (swapping the salign and scale attributes) and I was able to "break" Mozilla 1.4 as well as Opera 7.1, which means that opera passes the attributes in the same order as they appear in the file. I was also trying this with the <param ...> tags in the <object> tag but it was still working correctly in the Internet Explorer, but I suppose that this has something to do with different version of the Flash Plugin used there. Perhaps it would be a good idea to notify Macromedia of this problem? Would you please let me know what will be the next steps regarding this issue? Will you pass the attributes to the plugin in the "old" way (in the order in which they appear in the file)? Or will there be a different solution (and in which version)? Thanks again for being so helpful and quick. Radoslav Bielik
um... why does it matter if the doc is XML or HTML? Why wouldn't plugins have problems with wrong attribute order in XML documents? >At the same time, this is a pretty nasty hack. like the rest of that file? ;)
This makes me very worried. Noone should depend on order of attributes, especially not such major plugins as the flash-plugin. I'd really like to hear from some plugin people before this was checked in to the tree. Is there any way that it could be this particular flash-movie that does something "wrong" rather then the plugin itself? Seems strange that we wouldn't hear more about this if salign got hosed this long ago. How come IE is able to be unsensitive to attribute order. Could it be that they always pass attributes to the plugin in some certain order, independent of the order in the DOM/markup? If so, could we do the same? Just chaning to sort in reversed order doesn't seem like a good fix since it'll "break" as many testcases as it'll fix. It just happens that the one attached in this bug belongs to the group that gets fixed.
OK. In order: 1) If the plugin binary itself is what's broken (rather than the movie) then we have to fix the attribute order back to what it was before. 2) HTML vs XML matters because attribute storage order is different. See the AddAttributes methods in the two content sinks. 3) We've run into issues with the Flash plugin being sensitive to order of things in the past, now that I think about it. So it's not too surprising. 4) IE uses a different plugin binary and a different plugin API (the ActiveX plugin API instead of the NPAPI). Therefore, this working in IE could be an API difference, or just it being a totally different flash plugin codebase. 5) Any testcases that "break" with this fix are already broken in Opera, NS4, Konqueror, Mozilla 1.4 and earlier, and any other browsers that use NPAPI. Since the only reason to use that <embed> is to have it work with those browsers, I doubt we'll break anything, really. 6) salign doesn't seem to be all that widely used... And the green square movie really can't be doing anything wrong that I can see. I'll make sure to ask a plugins person for review. ;) Radoslav, the next steps are us agreeing what to do and then checking in a patch, probably. Hopefully for 1.7b.
Attachment #142011 - Flags: superreview?(jst)
Attachment #142011 - Flags: review?(peterlubczynski-bugs)
Hi Jonas, (In reply to comment #16) > Is there any way that it could be this particular flash-movie that does > something "wrong" rather then the plugin itself? Seems strange that we > wouldn't > hear more about this if salign got hosed this long ago. Thee flash-movie in the testcase is provided with the source and anyone can check that it does nothing else but draw a green rectangle. In the flash publish settings for HTML page, one can choose the alignment, and it does nothing else but presets the salign attribute of the <embed> tag in the generated HTML. I don't think it could be considered that there's something wrong in this particular trivial flash-movie, while it is working as expected in majority of the browsers. But on the other hand, I can understand that you're concerned about this, as I don't think that the plugin should rely on the order of the attributes. It is also possible that the salign attribute is not used widely, as it is usually not needed (most of the flash-movies I've seen are using the same width/height of the embed tag as their internal height). The salign attributes is useful only with scale="noscale" when you dynamically resize your flash movie (using a server side script) and want the content of the movie to adapt to it's new size, instead of stretching/scaling. I wouldn't find about this issue myself if a friend of mine who is using the poll did not point to me that it is trimmed in Mozilla 1.5 (I did all the testing with Mozilla 1.4) > How come IE is able to be unsensitive to attribute order. Could it be that > they > always pass attributes to the plugin in some certain order, independent of > the > order in the DOM/markup? If so, could we do the same? I think that this may be caused by two things: 1. IE doesn't use the <embed> tag at all, it is using the <param> objects inside the <object> tag. However, it didn't have any effect when I tried to swap the scale/salign <param> tags. 2. IE is using a different Flash plugin, there were always two versions of the Flash plugin - one for IE (now for IE/AOL) and one for Netscape/other browsers. This might be the reason? I don't know but perhaps Mozilla team could consult Macromedia support with this issue? > Just chaning to sort in reversed order doesn't seem like a good fix since > it'll > "break" as many testcases as it'll fix. It just happens that the one > attached in > this bug belongs to the group that gets fixed. I don't think that reversing the order would fix the error, but preserving the order in which the attributes appear in the file, partially because I think that this is the way it was done in versions 1.4 and earlier, and this seems to be the way it is done in Opera? I don't know, it's just my $0.02. Regards, Rado
Comment on attachment 142011 [details] [diff] [review] Patch for issue #2 seems okay to have this hack in our code but I'd really like a bigger comment in the code as to why the order of attributes matters for HTML vs. XML. Since the browser simply hands the plugin two arrays of attribute/value pairs in NPP_New, it's really up to the plugin to interpret these. Order shouldn't matter but we have no control over how their loop is coded. I'll let the Macromedia engineers know about this bug and maybe future versions won't be suspect to the same problems.
Attachment #142011 - Flags: review?(peterlubczynski-bugs) → review+
(In reply to comment #17) Boris, Thank you for clearly summarizing what I was trying to say in a complicated way :) Also thanks for all your help, I'll keep watching this issue and I'll be glad to answer any further questions you might have. Thanks again and keep up the good work! Regards, Rado
Comment on attachment 142011 [details] [diff] [review] Patch for issue #2 sr=jst, but yeah, a big flashing comment would be good here.
Attachment #142011 - Flags: superreview?(jst) → superreview+
Taking.
Assignee: peterlubczynski-bugs → bzbarsky
Status: UNCONFIRMED → NEW
Ever confirmed: true
Keywords: regression
OS: Windows XP → All
Priority: -- → P2
Hardware: PC → All
Summary: flash movie is cut in 1.5 and 1.6 → [FIXr]flash movie is cut in 1.5 and 1.6
Target Milestone: --- → mozilla1.7beta
Depends on: 213347
Checked into the 1.7b trunk, with the following comment added: // Some plugins (eg Flash, see bug 234675.) are actually sensitive to the // attribute order. So we want to make sure we give the plugin the // attributes in the order they came in in the source, to be compatible with // other browsers. Now in HTML, the storage order is the reverse of the // source order, while in XML and XHTML it's the same as the source order // (see the AddAttributes functions in the HTML and XML content sinks).
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
I work on the Flash Plugin. Sorry for not enterring the discussion earlier, but this was only brought to my attention today. An implementation detail of our player is scale and salign are stored in a single "WORD mode", with scale in the lower byte and salign in the upper. The control respectively processes params scale and salign with "mode = (mode & ~0x0f) | scaleFlags" and "mode = (mode & 0xf) | alignFlags". The plugin handle the same attributes of the embed tag with "mode = scaleFlags" and "mode = mode | alignFlags". This is unfortunate, as the plugin will ignore an salign if it's followed by a scale, but the control is order independant. Of course, if you consider the case <object> <param name="salign" value="L" /> <param name="salign" value="T" /> <embed salign="L" salign="T" /> </object> then the control is undefined (either "L" or "T", but not both), but the plugin isn't ("LT"). It's surprising this hasn't been reported as a bug (to macromedia) -- our tools (Dreamweaver and Flash) emit one scale param followed by one salign param, so I suppose most folks start with that, and never re-order the attributes. Which brings me to my points: 1. Given that we haven't seen this as a bug before, I feel certain all plugin browsers supply the attributes in the same order they were specified. If Mozilla broke with this tradition, alot of existing flash content would break with the existing players, so I think it's good that Mozilla continue to support source order for all document types that can embed a plugin. 2. While I loath to admit it, I don't think the flash player should fix this incompatibility. Consider <embed salign="r" scale="NoScale>. The current player ignores the salign when it's followed by scale. So it is possible that my existing page is meant to be left aligned, but contains the ignored salign. If this is fixed, then this existing page will break, as the content will right align. 3. If you consider the case of repeated attributes -- again, not something you'd intentionally do, but it happens quite regularly -- I'm fairly sure all plugins are order dependant. Which re-enforces the fact that all document types supporting object or embed in mozilla should make sure to preserve historical order (despite order dependance being improper).
Having the same attribute set multiple times is something that the plugin will never see, at least in mozilla. The reason is that one of the attributes will be dropped during parsing, an element can never ever have two attributes with the same name. I would expect other browsers to do the same thing actually, but that is up to them. I was originally going to propose that since the flashplugin has this behaviour we should make sure to always report the "scale" attribute before "salign". That way we wouldn't be bitten by this again if we change the order attributes are stored. Unforunatly this means that pages such as those mentioned in point 2 in the previous comment will "break". It's hard to say what is more important here: logical behaviour or backwardscompatible behaviour. Personally i'd say that logical behaviour is better, especially if macromedias tools generate pages that won't be affected. But if others think different then i'm more then willing to adjust.
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: