Open Bug 242237 Opened 21 years ago Updated 2 years ago

ability to freeze (and thaw) all page animation: GIFs, Flash, DHTML (e.g. to prevent "DHTML popup ads")

Categories

(Core :: General, enhancement)

enhancement

Tracking

()

People

(Reporter: danm.moz, Unassigned)

References

(Blocks 1 open bug)

Details

(Keywords: fixed-aviary1.0, fixed1.7.5)

Attachments

(2 files)

Now that good tools to control unrequested windows are becoming common, advertisers are moving into the same window as the actual page content. It's taken a surprisingly long time. It's going to get worse. I'm not advocating getting rid of all advertising. I'm just advocating a way to control the really obnoxious "my first marketing job" stuff. Unrequested windows are very annoying because they force your attention away. In-page animation is less distracting, but not very much. I've actually trained myself to not even glance at the part of a page that's jumping up and down, demanding my attention. This is unnatural and it's going to get me run over in a crosswalk some day. Or eaten by a cougar. It upsets me that I have to do this to myself. I tend to watch TV with closed captioning on because at least the steady black and white text is less distracting than the in-show advertising. Behind the unattractive black text box I can see the edges of huge swaths of animated crap sliding in and flashing and gyrating and being orange. Turn off closed captioning and I can feel my pupils contracting to fight the light. TiVo, bless them, brought TV to this. Popup controls will do the same thing to the web. I've uninstalled Flash because it was only used to annoy me. You can't escape advertising. In my opinion you don't want a complete escape. But it seems reasonable to clamp down on the animated stuff. I suggest an enhancement allowing the user control over page animations. Animated elements should be stoppable and restartable, individually and page-wide. If it survives, this bug could be a metabug bringing together a range of smaller tasks to make this happen. Much of what needs to be done already exists as hidden preferences and extensions. I think they should be brought together in a single pref panel and enhanced. Perhaps this is an extension, but it will require some core hacking as well. Animated GIFs can be deanimated system-wide. I'd like to see finer control: the ability to start and stop them, individually and page-wide. I'd love to see (the configurable option to have) a little handle next to each animated GIF signifying that it can be animated; click here to start it up. Or stop it again. Maybe it animates automatically on :hover. A similar button in the chrome toolbar could return the entire page to its jumping, flashing self. There's an extension available for hiding Flash objects, and showing them when a little placeholder is clicked. That's useful. I'd love to see Mozilla capable of capturing and displaying the first frame, and starting and stopping the animation. I'm beginning to see brightly coloured DIVs sliding over the page content as it loads. Today this happens mostly on test sites, but occasionally on real sites. These sites suddenly become less annoying if one uses CAPS to disable setInterval and setTimeout. It would be nice if these two functions also could be stopped and started, page-wide. Others?
I think most of this bug should be implemented as an extension. Unfortunately it's not entirely possible without some core code help. This patch gives a script extension the ability to stop and start animated GIFs.
Comment on attachment 149457 [details] [diff] [review] access to PresContext::SetAnimationMode for chrome script +interface nsIDOMWindowAccess : nsISupports { + + void setImageAnimationMode(in unsigned short aMode); +}; Hey Dan, how would you feel about renaming this nsIDOMWindowUtils, to make it more generic. That way we could put other non-access related things here in the future too, things that we want to access from JS in our code, but not from webpages?
Comment on attachment 149457 [details] [diff] [review] access to PresContext::SetAnimationMode for chrome script Sure, that's a fine name. Well as long as the concept is acceptable, consider the name changed and yourself on the r= seat :) PS this change is necessary to get at background animated GIFs from script. As far as I know. Images that belong to image elements are no problem.
Attachment #149457 - Flags: superreview?(jst)
Attachment #149457 - Flags: review?(caillon)
Comment on attachment 149457 [details] [diff] [review] access to PresContext::SetAnimationMode for chrome script >+[scriptable, uuid(7e1ec6ff-2e67-4b26-aa39-a3eb2a3b8a4e)] >+interface nsIDOMWindowAccess : nsISupports { >+ >+ void setImageAnimationMode(in unsigned short aMode); How about: readonly attribute unsigned short imageAnimationMode; >+class nsDOMWindowAccess : public nsIDOMWindowAccess, >+ public nsSupportsWeakReference >+{ >+public: >+ nsDOMWindowAccess(GlobalWindowImpl *aWindow) { >+ mWindow = aWindow; Use an initialization list. E.g: nsDOMWindowAcces(GlobalWindowImpl *aWindow) : mWindow(aWindow) {} >Index: dom/src/base/nsGlobalWindow.h >=================================================================== >RCS file: /cvsroot/mozilla/dom/src/base/nsGlobalWindow.h,v >retrieving revision 1.225 >diff -u -p -r1.225 nsGlobalWindow.h >--- dom/src/base/nsGlobalWindow.h 26 May 2004 18:10:47 -0000 1.225 >+++ dom/src/base/nsGlobalWindow.h 27 May 2004 23:33:12 -0000 >@@ -293,6 +293,7 @@ protected: > nsRefPtr<BarPropImpl> mPersonalbar; > nsRefPtr<BarPropImpl> mStatusbar; > nsRefPtr<BarPropImpl> mScrollbars; >+ nsCOMPtr<nsIWeakReference> mWindowAccess; > nsTimeoutImpl* mTimeouts; > nsTimeoutImpl** mTimeoutInsertionPoint; > PRUint32 mTimeoutPublicIdCounter; It kind of sucks that we put an extra ptr here on the window; the alternative I propopsed to johnny was to turn the nsIDOMWindowUtils interface into a service to which the actual window would get passed in as an argument. The other upshot of doing things that way would be that you wouldn't need to call GetInterface() on every window you need to do this. Jst seemed to think the way in the patch (using getInterface) was slightly better and it doesn't really matter much to me, I'm just including this comment here for posterity. :-) r=caillon with my other comments addressed and jst's name change as well.
Attachment #149457 - Flags: review?(caillon) → review+
(In reply to comment #4) > (From update of attachment 149457 [details] [diff] [review]) > >+[scriptable, uuid(7e1ec6ff-2e67-4b26-aa39-a3eb2a3b8a4e)] > >+interface nsIDOMWindowAccess : nsISupports { > >+ > >+ void setImageAnimationMode(in unsigned short aMode); > > How about: > > readonly attribute unsigned short imageAnimationMode; Er, I meant writeonly. But come to think about that, I don't guess we support that. Which sucks. So nevermind this. :-D
Comment on attachment 149457 [details] [diff] [review] access to PresContext::SetAnimationMode for chrome script sr=jst
Attachment #149457 - Flags: superreview?(jst) → superreview+
It'd be easy enough to make it a full access, read- and write-able attribute. Come to think of it, why not?
(In reply to comment #0) >I'm beginning to see brightly coloured DIVs sliding over the page content as it >loads. Today this happens mostly on test sites, but occasionally on real sites. Dilbert springs to mind... what's really annoying is that the stupid advert obscured the calendar so you couldn't browse the archive properly.
Comment on attachment 149457 [details] [diff] [review] access to PresContext::SetAnimationMode for chrome script Since your helper object doesn't have any state you could simply create a new one every time someone needs one, rather than caching it.
I debated checking this in at all because it doesn't address the really useful part, stymieing animated DHTML. I'm not even sure it's possible to do a decent job of that. Finally I decided it was somewhat useful and could lay groundwork for other tasks (like bug 245920 for which admittedly we haven't yet even figured out what approach we want to take). And maybe some bright person will figure out some good animated DHTML heuristics that can be layered on. Agreed at this point the cached helper object isn't strictly necessary. But four additional bytes per DOM window seems cheap to me, and I was hoping to save some heap thrashing. Which is better? I imagine it's a wash.
*** Bug 246453 has been marked as a duplicate of this bug. ***
Summary: ability to freeze (and thaw) all page animation → ability to freeze (and thaw) all page animation: GIFs, Flash, DHTML
*** Bug 255277 has been marked as a duplicate of this bug. ***
*** Bug 255679 has been marked as a duplicate of this bug. ***
Comment on attachment 149457 [details] [diff] [review] access to PresContext::SetAnimationMode for chrome script I need the DOMWindowUtils object for bug 172962.
Attachment #149457 - Flags: approval-aviary?
Comment on attachment 149457 [details] [diff] [review] access to PresContext::SetAnimationMode for chrome script too late for feature changes on the branch.
Attachment #149457 - Flags: approval-aviary? → approval-aviary-
Comment on attachment 149457 [details] [diff] [review] access to PresContext::SetAnimationMode for chrome script my bad. a couple of us missed the dependency. a=asa for checkin to the aviary branch.
Attachment #149457 - Flags: approval-aviary- → approval-aviary+
Comment on attachment 149457 [details] [diff] [review] access to PresContext::SetAnimationMode for chrome script Should probably sync this to 1.7 branch too...
Attachment #149457 - Flags: approval1.7.x?
*** Bug 262348 has been marked as a duplicate of this bug. ***
*** Bug 263582 has been marked as a duplicate of this bug. ***
*** Bug 265546 has been marked as a duplicate of this bug. ***
This bug seems to have an aviary branch checkin associated with it. If this has landed on the aviary branch (as much as it's going to for 1.0) can you please add the "fixed-aviary1.0" keyword? Thanks.
*** Bug 265922 has been marked as a duplicate of this bug. ***
Keywords: fixed-aviary1.0
Does this bug address the Flash issue?
Product: Browser → Seamonkey
Comment on attachment 149457 [details] [diff] [review] access to PresContext::SetAnimationMode for chrome script a=asa for 1.7.x checkin.
Attachment #149457 - Flags: approval1.7.x? → approval1.7.x+
Assignee: general → danm.moz
*** Bug 271925 has been marked as a duplicate of this bug. ***
Why is this bug still open?
Keywords: fixed1.7.5
was this ever checked in to the trunk?
and why exactly are we adding non-frozen files to the SDK???
This interface should definitely not have been in SDK_XPIDLSRCS. XPIDLSRCS is the correct place for non-frozen interface. We should correct this on the 1.7 branch and replace the 1.7.5 SDKs that have this interface incorrectly included.
Attachment #169070 - Flags: review?(bsmedberg)
Attachment #169070 - Flags: approval1.7.6?
Attachment #169070 - Flags: review?(bsmedberg) → review+
[cmp@spruce base]$ cvs commit Makefile.in Checking in Makefile.in; /cvsroot/mozilla/dom/public/idl/base/Makefile.in,v <-- Makefile.in new revision: 1.13.28.3; previous revision: 1.13.28.2 done
Comment on attachment 169070 [details] [diff] [review] move this iface to XPIDLSRC FYI, after committing this patch to MOZILLA_1_7_BRANCH, I moved the 1.7.5 release tag to cover the new revision of Makefile.in. Before doing so, I applied a new tag (MOZILLA_1_7_5_RELEASE_ORIG) to reflect the revision we originally shipped 1.7.5 as.
New Gecko SDK files have been generated and put in place for Mozilla 1.7.5. Could take an hour or two to propagate to all of the mirrors.
Depends on: 277092
Comment on attachment 169070 [details] [diff] [review] move this iface to XPIDLSRC Too late for 1.7.6. Also a friendly reminder that things like this need to go in both branches, not just one. If approval is still wanted for future releases on this branch, please request for both 1.7.x and aviary.
Attachment #169070 - Flags: approval1.7.6? → approval1.7.6-
Assignee: danm.moz → nobody
*** Bug 289954 has been marked as a duplicate of this bug. ***
*** Bug 333328 has been marked as a duplicate of this bug. ***
Product: Mozilla Application Suite → Core
QA Contact: general → general
*** Bug 358246 has been marked as a duplicate of this bug. ***
Summary: ability to freeze (and thaw) all page animation: GIFs, Flash, DHTML → ability to freeze (and thaw) all page animation: GIFs, Flash, DHTML (e.g. to prevent "DHTML popup ads")
Go to http://www.popuptest.com/ and see the drop down and sticky popups.
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: