Open Bug 688133 Opened 13 years ago Updated 2 years ago

erroneous calls to onStateChange ProgressListener

Categories

(Core :: DOM: Navigation, defect)

6 Branch
x86
Windows XP
defect

Tracking

()

UNCONFIRMED

People

(Reporter: ronen.zilberman, Unassigned)

Details

User Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Build ID: 20110902133214

Steps to reproduce:

There seems to be erroneous calls to the onStateChange ProgressListener, atleast with regards to the documentation here: https://developer.mozilla.org/en/nsIWebProgressListener

I installed a progress listener like this:
gBrowser.addTabsProgressListener(progressListener);      

and the onstate function code is:
  onStateChange: function(aBrowser, aWebProgress, aRequest, aFlag, aStatus) {
	var url = null;
	if (aRequest && aRequest.URI) url = aRequest.URI.spec;
        var flags = ... string representation of aFlag...;
        dump("state change: (" + aFlag.toString(16) + "="  + flags +") url = " + url);	
   }


I encounter a URL that behaves strangely but (not intense) debugging didn't pinpoint the exact culprit, as other websites behave normally.

------

Another issue is that for some reason the calling log changes when I use the Fiddler web proxy. (http://www.fiddler2.com/). As you can imagine, this was quite tricky as I use it as a debug tool. I can't imagine how or why it would cause a change in firefox internal behavior. 

----------
All the bevaiours are consistant and repeatable.
UA string: User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2



Actual results:

URL: http://www.etsy.com/shop/jessjamesjake?ref=fp_treasury_12
(no fiddler)

----- START LOG
1 state change: (f0001=STATE_START STATE_IS_REQUEST STATE_IS_DOCUMENT STATE_IS_NETWORK STATE_IS_WINDOW ) url = http://www.etsy.com/shop/jessjamesjake?ref=fp_treasury_12
2 state change: (f0001=STATE_START STATE_IS_REQUEST STATE_IS_DOCUMENT STATE_IS_NETWORK STATE_IS_WINDOW ) url = about:blank
3 state change: (c0010=STATE_STOP STATE_IS_NETWORK STATE_IS_WINDOW ) url = about:blank
4 state change: (f0001=STATE_START STATE_IS_REQUEST STATE_IS_DOCUMENT STATE_IS_NETWORK STATE_IS_WINDOW ) url = http://www.facebook.com/plugins/like.php?api_key=89186614300&channel_url=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%3Fversion%3D3%23cb%3Df7d2ff873ddf4c%26origin%3Dhttp%253A%252F%252Fwww.etsy.com%252Ff32c571a0947f82%26relation%3Dparent.parent%26transport%3Dpostmessage&extended_social_context=false&href=http%253A%252F%252Fwww.etsy.com%252Fshop%252Fjessjamesjake&layout=button_count&locale=en_US&node_type=link&sdk=joey&show_faces=false&width=90
5 state change: (c0010=STATE_STOP STATE_IS_NETWORK STATE_IS_WINDOW ) url = http://www.etsy.com/shop/jessjamesjake?ref=fp_treasury_12
6 state change: (c0010=STATE_STOP STATE_IS_NETWORK STATE_IS_WINDOW ) url = http://www.facebook.com/plugins/like.php?api_key=89186614300&channel_url=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%3Fversion%3D3%23cb%3Df7d2ff873ddf4c%26origin%3Dhttp%253A%252F%252Fwww.etsy.com%252Ff32c571a0947f82%26relation%3Dparent.parent%26transport%3Dpostmessage&extended_social_context=false&href=http%253A%252F%252Fwww.etsy.com%252Fshop%252Fjessjamesjake&layout=button_count&locale=en_US&node_type=link&sdk=joey&show_faces=false&width=90
7 state change: (f0001=STATE_START STATE_IS_REQUEST STATE_IS_DOCUMENT STATE_IS_NETWORK STATE_IS_WINDOW ) url = about:blank
8 state change: (c0010=STATE_STOP STATE_IS_NETWORK STATE_IS_WINDOW ) url = about:blank
9 state change: (f0001=STATE_START STATE_IS_REQUEST STATE_IS_DOCUMENT STATE_IS_NETWORK STATE_IS_WINDOW ) url = http://static.ak.fbcdn.net/connect/xd_proxy.php?version=3#cb=f7d2ff873ddf4c&origin=http%3A%2F%2Fwww.etsy.com%2Ff32c571a0947f82&relation=parent.parent&transport=postmessage&type=resize&height=20&ackData[id]=1&width=90
10 state change: (c0010=STATE_STOP STATE_IS_NETWORK STATE_IS_WINDOW ) url = http://static.ak.fbcdn.net/connect/xd_proxy.php?version=3#cb=f7d2ff873ddf4c&origin=http%3A%2F%2Fwww.etsy.com%2Ff32c571a0947f82&relation=parent.parent&transport=postmessage&type=resize&height=20&ackData[id]=1&width=90
11 state change: (10010=STATE_STOP STATE_IS_REQUEST ) url = null
12 state change: (10010=STATE_STOP STATE_IS_REQUEST ) url = null

END LOG

There are many things wrong here:
- calls to about:blank
- some internal (iframe/ajax) calls seen as document calls
-----------------------------------------------------------

----- START LOG
URL: http://www.x.com
(WITH fiddler)

state change: (f0001=STATE_START STATE_IS_REQUEST STATE_IS_DOCUMENT STATE_IS_NETWORK STATE_IS_WINDOW ) url = https://www.x.com/
state change: (c0010=STATE_STOP STATE_IS_NETWORK STATE_IS_WINDOW ) url = https://www.x.com/

---- END LOG

This is just any random website.
Here you can see that the last call (STATE_IS_REQUEST) is missing.
-----------------------------------------------

URL: http://www.etsy.com/shop/jessjamesjake?ref=fp_treasury_12
(WITH fiddler)

----- START LOG
state change: (f0001=STATE_START STATE_IS_REQUEST STATE_IS_DOCUMENT STATE_IS_NETWORK STATE_IS_WINDOW ) url = http://www.etsy.com/shop/jessjamesjake?ref=fp_treasury_12
state change: (c0010=STATE_STOP STATE_IS_NETWORK STATE_IS_WINDOW ) url = http://www.etsy.com/shop/jessjamesjake?ref=fp_treasury_12
state change: (10010=STATE_STOP STATE_IS_REQUEST ) url = http://static.ak.fbcdn.net/rsrc.php/v1/yN/r/l2tJ1_sR57H.css
state change: (f0001=STATE_START STATE_IS_REQUEST STATE_IS_DOCUMENT STATE_IS_NETWORK STATE_IS_WINDOW ) url = about:blank
state change: (c0010=STATE_STOP STATE_IS_NETWORK STATE_IS_WINDOW ) url = about:blank
state change: (f0001=STATE_START STATE_IS_REQUEST STATE_IS_DOCUMENT STATE_IS_NETWORK STATE_IS_WINDOW ) url = http://static.ak.fbcdn.net/connect/xd_proxy.php?version=3#cb=f8535fc2346b68&origin=http%3A%2F%2Fwww.etsy.com%2Ff1679af3b32ac66&relation=parent.parent&transport=postmessage&type=resize&height=20&ackData[id]=1&width=90
state change: (c0010=STATE_STOP STATE_IS_NETWORK STATE_IS_WINDOW ) url = http://static.ak.fbcdn.net/connect/xd_proxy.php?version=3#cb=f8535fc2346b68&origin=http%3A%2F%2Fwww.etsy.com%2Ff1679af3b32ac66&relation=parent.parent&transport=postmessage&type=resize&height=20&ackData[id]=1&width=90
state change: (10010=STATE_STOP STATE_IS_REQUEST ) url = null
state change: (10010=STATE_STOP STATE_IS_REQUEST ) url = null

--- END LOG

The behavior changes. Can't make sense of how.
------------------------------------------------------------------------







Expected results:

Here is a call log for x.com with no fiddler (i.e normal behaviour)

---- START LOG
state change: (f0001=STATE_START STATE_IS_REQUEST STATE_IS_DOCUMENT STATE_IS_NETWORK STATE_IS_WINDOW ) url = http://www.x.com/
state change: (c0010=STATE_STOP STATE_IS_NETWORK STATE_IS_WINDOW ) url = https://www.x.com/
state change: (10010=STATE_STOP STATE_IS_REQUEST ) url = null
---- END LOG


Even here there are some errors with regards to the documentation:
1. The order of the STATE_STOP calls are reversed.
2. the call that has STATE_IS_REQUEST does not have STATE_IS_DOCUMENT.



part of from said documention:
"when a document request completes, two onStateChange() calls with STATE_STOP are generated. The document request is passed as aRequest to both calls. The first has STATE_IS_REQUEST and STATE_IS_DOCUMENT set, and the second has the STATE_IS_WINDOW flag set (and possibly the STATE_IS_NETWORK flag set as well -- see above for a description of when the STATE_IS_NETWORK flag may be set). This second STATE_STOP event may be useful as a way to partition the work that occurs when a document request completes.
"
Component: Location Bar → Document Navigation
Product: Firefox → Core
QA Contact: location.bar → docshell
The additional calls are for iframe start and stop. However other pages with iframes do not show this behaviour.
Also the STATE_STOP + STATE_IS_REQUEST is called twice, with a NULL aRequest.URI.
Would you test your progress listener with <browser/> instead of <tabbrowser/>? We are filtering out some onStateChange calls for <tabbrowser/>, if the total number of requests are more than 1.
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.