Closed Bug 106464 Opened 23 years ago Closed 20 years ago

Cookie notification hangs browser while dragging bookmark.

Categories

(Core :: DOM: Copy & Paste and Drag & Drop, defect)

x86
Windows ME
defect
Not set
normal

Tracking

()

VERIFIED DUPLICATE of bug 100180

People

(Reporter: nfagerlund, Assigned: danm.moz)

Details

(Keywords: hang)

From Bugzilla Helper:
User-Agent: Mozilla/5.0 (Windows; U; Win 9x 4.90; en-US; rv:0.9.5) Gecko/20011011
BuildID:    2001101117

I started dragging a site's icon from the address bar to the bookmark list
before the page was completely loaded. The site tried to send a cookie while I
was doing that, and when the cookie permission request was displayed, it hung
the browser, and I had to terminate it with ctl-alt-del. 

Reproducible: Didn't try
Steps to Reproduce:
You have to have your cookies set to require permission every time. The problem
is that you have to be able to predict exactly WHEN a site will try to slip you
a cookie in order to reproduce this. If you can do that, all you need to do is
be dragging a site's icon through the bookmark list when the request hits. I
haven't tried to artificially induce this hang, but it happened the same way two
or three times on seperate sites, so I'm fairly confidant that it can be done. 

Actual Results:  n/a

Expected Results:  n/a
I'm able to reproduce this very easily.

1. Set preferences to warn-before-accepting-cookie
2. Go to http://home.netscape.com
3. Immediately while the page starts loading, start dragging the icon for the 
current page.  Keep the mouse button depressed
4. The "confirm" dialog will appear but the dialog box will be empty.  Browser 
is hung at this point.

Using the debugger to break execution at this point does not give any useful 
information.
Status: UNCONFIRMED → NEW
Ever confirmed: true
Tried it again and this time I got a meaningful stack trace at the point of 
hang.

USER32! 77e72c30()
nsXULWindow::ShowModal(nsXULWindow * const 0x04d5aa40) line 264 + 31 bytes
nsWebShellWindow::ShowModal(nsWebShellWindow * const 0x04d5aa40) line 1057
nsContentTreeOwner::ShowAsModal(nsContentTreeOwner * const 0x04d1f50c) line 415
nsWindowWatcher::OpenWindowJS(nsWindowWatcher * const 0x01239724, nsIDOMWindow * 
0x03068b24, const char * 0x00f4e95c, const char * 0x00f4f0b8, const char * 
0x00f4f094, int 1, unsigned int 1, long * 0x04d5b660, nsIDOMWindow * * 
0x0012d904) line 717
nsWindowWatcher::OpenWindow(nsWindowWatcher * const 0x01239720, nsIDOMWindow * 
0x03068b24, const char * 0x00f4e95c, const char * 0x00f4f0b8, const char * 
0x00f4f094, nsISupports * 0x04d5b850, nsIDOMWindow * * 0x0012d904) line 453 + 48 
bytes
nsPromptService::DoDialog(nsPromptService * const 0x0290da24, nsIDOMWindow * 
0x03068b24, nsIDialogParamBlock * 0x04d5b850, const char * 0x00f4e95c) line 629 
+ 77 bytes
nsPromptService::ConfirmEx(nsPromptService * const 0x0290da20, nsIDOMWindow * 
0x03068b24, const unsigned short * 0x04d5b8b0, const unsigned short * 
0x04d5a640, unsigned int 0, const unsigned short * 0x00000000, const unsigned 
short * 0x00000000, const unsigned short * 0x00000000, const unsigned short * 
0x04d5a5e0, int * 0x0012db40, int * 0x0012db08) line 347 + 36 bytes
nsPrompt::ConfirmEx(nsPrompt * const 0x04d5b4a0, const unsigned short * 
0x04d5b8b0, const unsigned short * 0x04d5a640, unsigned int 1027, const unsigned 
short * 0x00000000, const unsigned short * 0x00000000, const unsigned short * 
0x00000000, const unsigned short * 0x04d5a5e0, int * 0x0012db40, int * 
0x0012db08) line 167
permission_CheckConfirmYN(nsIPrompt * 0x04d5b4a0, unsigned short * 0x04d5a640, 
unsigned short * 0x04d5a5e0, int * 0x0012db40) line 100 + 54 bytes
Permission_Check(nsIPrompt * 0x04d5b4a0, const char * 0x04d5b7f0, int 0, int 1, 
unsigned short * 0x04d5a640) line 204 + 21 bytes
cookie_SetCookieString(char * 0x04d5a760, nsIPrompt * 0x04d5b4a0, const char * 
0x04d5a7b0, long 0, nsIIOService * 0x0127b900) line 1168 + 28 bytes
COOKIE_SetCookieStringFromHttp(char * 0x04d5a760, char * 0x00000000, nsIPrompt * 
0x04d5b4a0, const char * 0x04d5a7b0, char * 0x00000000, nsIIOService * 
0x0127b900) line 1362 + 25 bytes
COOKIE_SetCookieString(char * 0x04d5a760, nsIPrompt * 0x04d5b4a0, const char * 
0x04d5a7b0, nsIIOService * 0x0127b900) line 1262 + 25 bytes
nsCookieService::SetCookieString(nsCookieService * const 0x04c65570, nsIURI * 
0x04c63840, nsIPrompt * 0x04d5b4a0, const char * 0x04d5a7b0) line 191 + 29 bytes
nsHTMLDocument::SetCookie(nsHTMLDocument * const 0x04cbdf04, const nsAString & 
{...}) line 1981 + 46 bytes
XPTC_InvokeByIndex(nsISupports * 0x04cbdf04, unsigned int 59, unsigned int 1, 
nsXPTCVariant * 0x0012e02c) line 154
XPCWrappedNative::CallMethod(XPCCallContext & {...}, XPCWrappedNative::CallMode 
CALL_SETTER) line 1951 + 42 bytes
XPCWrappedNative::SetAttribute(XPCCallContext & {...}) line 1821 + 14 bytes
XPC_WN_GetterSetter(JSContext * 0x041dac50, JSObject * 0x03d096e0, unsigned int 
1, long * 0x03f45e4c, long * 0x0012e278) line 1290 + 12 bytes
js_Invoke(JSContext * 0x041dac50, unsigned int 1, unsigned int 2) line 809 + 23 
bytes
js_InternalInvoke(JSContext * 0x041dac50, JSObject * 0x03d096e0, long 64220192, 
unsigned int 0, unsigned int 1, long * 0x0012f0ac, long * 0x0012f0ac) line 901 + 
20 bytes
js_SetProperty(JSContext * 0x041dac50, JSObject * 0x03d096e0, long 51111136, 
long * 0x0012f0ac) line 2585 + 47 bytes
js_Interpret(JSContext * 0x041dac50, long * 0x0012f2d8) line 2629 + 1939 bytes
js_Execute(JSContext * 0x041dac50, JSObject * 0x027d5630, JSScript * 0x04d58b50, 
JSStackFrame * 0x00000000, unsigned int 0, long * 0x0012f2d8) line 989 + 13 
bytes
JS_EvaluateUCScriptForPrincipals(JSContext * 0x041dac50, JSObject * 0x027d5630, 
JSPrincipals * 0x04ccf3b0, const unsigned short * 0x0265ee70, unsigned int 439, 
const char * 0x04d5f1b0, unsigned int 1275, long * 0x0012f2d8) line 3361 + 25 
bytes
nsJSContext::EvaluateString(nsJSContext * const 0x041dae90, const nsAString & 
{...}, void * 0x027d5630, nsIPrincipal * 0x04ccf3ac, const char * 0x04d5f1b0, 
unsigned int 1275, const char * 0x00efd688, nsAString & {...}, int * 0x0012f344) 
line 642 + 85 bytes
nsScriptLoader::EvaluateScript(nsScriptLoadRequest * 0x04d5f0a0, const 
nsAFlatString & {...}) line 576
nsScriptLoader::ProcessRequest(nsScriptLoadRequest * 0x04d5f0a0) line 483 + 22 
bytes
nsScriptLoader::ProcessScriptElement(nsScriptLoader * const 0x04cc9f20, 
nsIDOMHTMLScriptElement * 0x04d59578, nsIScriptLoaderObserver * 0x04d5957c) line 
426 + 15 bytes
nsHTMLScriptElement::SetDocument(nsHTMLScriptElement * const 0x04d59550, 
nsIDocument * 0x04cbdd40, int 0, int 1) line 158
nsGenericHTMLContainerElement::AppendChildTo(nsGenericHTMLContainerElement * 
const 0x04cf7e60, nsIContent * 0x04d59550, int 0, int 0) line 4163
HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode & {...}) line 5110
HTMLContentSink::AddLeaf(HTMLContentSink * const 0x04ccf490, const nsIParserNode 
& {...}) line 3483 + 12 bytes
CNavDTD::AddLeaf(const nsIParserNode * 0x0265a520) line 3767 + 22 bytes
CNavDTD::HandleScriptToken(const nsIParserNode * 0x0265a520) line 2228 + 12 
bytes
CNavDTD::OpenContainer(const nsCParserNode * 0x0265a520, nsHTMLTag 
eHTMLTag_script, int 1, nsEntryStack * 0x00000000) line 3418 + 12 bytes
CNavDTD::HandleDefaultStartToken(CToken * 0x03ea4f80, nsHTMLTag eHTMLTag_script, 
nsCParserNode * 0x0265a520) line 1302 + 20 bytes
CNavDTD::HandleStartToken(CToken * 0x03ea4f80) line 1715 + 22 bytes
CNavDTD::HandleToken(CNavDTD * const 0x04c759d0, CToken * 0x00000000, nsIParser 
* 0x04ccaef0) line 881 + 12 bytes
CNavDTD::BuildModel(CNavDTD * const 0x04c759d0, nsIParser * 0x04ccaef0, 
nsITokenizer * 0x04c70920, nsITokenObserver * 0x00000000, nsIContentSink * 
0x04ccf490) line 517 + 20 bytes
nsParser::BuildModel() line 1965 + 34 bytes
nsParser::ResumeParse(int 1, int 1) line 1831 + 11 bytes
nsParser::ContinueParsing() line 1483 + 17 bytes
nsParser::HandleParserContinueEvent() line 1543
nsParserContinueEvent::HandleEvent() line 232
HandlePLEvent(nsParserContinueEvent * 0x0506d790) line 243
PL_HandleEvent(PLEvent * 0x0506d790) line 590 + 10 bytes
PL_ProcessPendingEvents(PLEventQueue * 0x00aae4f0) line 520 + 9 bytes
_md_EventReceiverProc(HWND__ * 0x0050051c, unsigned int 49410, unsigned int 0, 
long 11199728) line 1071 + 9 bytes
USER32! 77e71268()
00aae4f0()
We are looping in the following while loop at line 258 in nsXulWindow.cpp.  
Looks like a modal dialog bug -- reassigning to danm.

      while(NS_SUCCEEDED(rv) && mContinueModalLoop)
         {
         void* data;
         PRBool isRealEvent;
         PRBool processEvent;

         rv = appShell->GetNativeEvent(isRealEvent, data);
         if(NS_SUCCEEDED(rv))
            {
            window->ModalEventFilter(isRealEvent, data, &processEvent);
            if(processEvent)
               appShell->DispatchNativeEvent(isRealEvent, data);
            }
         }
Assignee: morse → danm
Target Milestone: --- → Future
*** Bug 131373 has been marked as a duplicate of this bug. ***
I believe bug 138748 is a duplicate of this. The summary of 138748 is better
than this bug's though, this is not just a cookies+bookmarks problem. Any kind
of confimation dialog in conjunction with any kind of drag action triggers this
bug. Also check bug 138748, comment 7 for a workaround.

Here's another testcase: go to http://nsa2.www.conxion.com/win2k/download.htm
and while the page is loading drag the URL from location bar to Tab-bar area
(dont release, or "drop"). Once loaded the page pops up a javascript
confirmation, causing the deadlock.
Component: Cookies → XP Apps: Drag and Drop
Target Milestone: Future → ---
QA Contact: tever → pmac
*** Bug 138748 has been marked as a duplicate of this bug. ***
Marking as dup of older bug 100180. Please reopen if you disagree, thanks!

*** This bug has been marked as a duplicate of 100180 ***
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → DUPLICATE
V.Duplicate
Status: RESOLVED → VERIFIED
Keywords: hang
You need to log in before you can comment on or make changes to this bug.