I attempted to embed the mozilla activex control into my dotnet csharp application. The code is listed in "Form1.cs".
It appears to run fine except that when the focus is moved to another
application and back, I get an assertion shown by the arrow comment in the following function:
NS_IMETHODIMP
nsFocusController::SetFocusedWindow(nsIDOMWindowInternal* aWindow)
{
if (aWindow && (mCurrentWindow != aWindow)) {
nsCOMPtr<nsIScriptGlobalObject> sgo = do_QueryInterface(aWindow);
if (sgo) {
nsCOMPtr<nsIDocShell> docShell;
sgo->GetDocShell(getter_AddRefs(docShell));
nsCOMPtr<nsIBaseWindow> basewin = do_QueryInterface(docShell);
if (basewin)
basewin->SetFocus();
}
}
if(mCurrentWindow) mPreviousWindow = mCurrentWindow;
else if (aWindow) mPreviousWindow = aWindow;
mCurrentWindow = aWindow;
if (mUpdateWindowWatcher) {
NS_ASSERTION(mActive, "This shouldn't happen"); // <--- ASSERTION
if (mCurrentWindow)
UpdateWWActiveWindow();
mUpdateWindowWatcher = PR_FALSE;
}
return NS_OK;
}
Values for some variables:
mActive: 0
mUpdateWindow: 1
this: 0x03bdfe28
aWindow: 0x03bdfca4
I attached to full stack trace "stacktrace.txt".
The version of Mozilla used is "mozilla-source-1.2.1.tar.bz2".
Thanks
-John
ntdll.dll!77f767cd()
> xpcom.dll!nsDebug::Assertion(const char * aStr=0x0529616c, const char *
>aExpr=0x05296164, const char * aFile=0x05296118, int aLine=149) Line 280 + 0xd C++
jsdom.dll!nsFocusController::SetFocusedWindow(nsIDOMWindowInternal *
aWindow=0x03bdfca4) Line 149 + 0x25 C++
jsdom.dll!nsFocusController::Focus(nsIDOMEvent * aEvent=0x04153630) Line 305
C++
gkcontent.dll!nsEventListenerManager::HandleEvent(nsIPresContext *
aPresContext=0x041e71f0, nsEvent * aEvent=0x0012dc2c, nsIDOMEvent * *
aDOMEvent=0x0012d864, nsIDOMEventTarget * aCurrentTarget=0x03bdfdc8, unsigned int
aFlags=4, nsEventStatus * aEventStatus=0x0012dc28) Line 1678 + 0x29 C++
jsdom.dll!nsWindowRoot::HandleChromeEvent(nsIPresContext *
aPresContext=0x041e71f0, nsEvent * aEvent=0x0012dc2c, nsIDOMEvent * *
aDOMEvent=0x0012d864, unsigned int aFlags=4, nsEventStatus * aEventStatus=0x0012dc28)
Line 182 C++
jsdom.dll!GlobalWindowImpl::HandleDOMEvent(nsIPresContext *
aPresContext=0x041e71f0, nsEvent * aEvent=0x0012dc2c, nsIDOMEvent * *
aDOMEvent=0x0012d864, unsigned int aFlags=4, nsEventStatus * aEventStatus=0x0012dc28)
Line 765 C++
gkcontent.dll!nsDocument::HandleDOMEvent(nsIPresContext *
aPresContext=0x041e71f0, nsEvent * aEvent=0x0012dc2c, nsIDOMEvent * *
aDOMEvent=0x0012d864, unsigned int aFlags=1, nsEventStatus * aEventStatus=0x0012dc28)
Line 3528 C++
gkcontent.dll!nsEventStateManager::PreHandleEvent(nsIPresContext *
aPresContext=0x041e71f0, nsEvent * aEvent=0x0012dfa8, nsIFrame *
aTargetFrame=0x05bc0e7c, nsEventStatus * aStatus=0x0012dddc, nsIView *
aView=0x041e8388) Line 518 C++
gklayout.dll!PresShell::HandleEventInternal(nsEvent * aEvent=0x0012dfa8,
nsIView * aView=0x041e8388, unsigned int aFlags=1, nsEventStatus * aStatus=0x0012dddc)
Line 6238 + 0x2b C++
gklayout.dll!PresShell::HandleEvent(nsIView * aView=0x041e8388, nsGUIEvent *
aEvent=0x0012dfa8, nsEventStatus * aEventStatus=0x0012dddc, int aForceHandle=1, int &
aHandled=1) Line 6167 + 0x19 C++
gkview.dll!nsViewManager::HandleEvent(nsView * aView=0x041e8388, nsGUIEvent *
aEvent=0x0012dfa8, int aCaptured=0) Line 2163 C++
gkview.dll!nsView::HandleEvent(nsViewManager * aVM=0x041e7f20, nsGUIEvent *
aEvent=0x0012dfa8, int aCaptured=0) Line 304 C++
gkview.dll!nsViewManager::DispatchEvent(nsGUIEvent * aEvent=0x0012dfa8,
nsEventStatus * aStatus=0x0012df10) Line 1943 + 0x17 C++
gkview.dll!HandleEvent(nsGUIEvent * aEvent=0x0012dfa8) Line 83 C++
gkwidget.dll!nsWindow::DispatchEvent(nsGUIEvent * event=0x0012dfa8,
nsEventStatus & aStatus=nsEventStatus_eIgnore) Line 1069 + 0xa C++
gkwidget.dll!nsWindow::DispatchWindowEvent(nsGUIEvent * event=0x0012dfa8)
Line 1090 C++
gkwidget.dll!nsWindow::DispatchFocus(unsigned int aEventType=105, int
isMozWindowTakingFocus=1) Line 5478 + 0xf C++
gkwidget.dll!nsWindow::ProcessMessage(unsigned int msg=7, unsigned int
wParam=722224, long lParam=0, long * aRetValue=0x0012e3b8) Line 4148 + 0x17 C++
gkwidget.dll!nsWindow::WindowProc(HWND__ * hWnd=0x00060552, unsigned int
msg=7, unsigned int wParam=722224, long lParam=0) Line 1338 + 0x1b C++
user32.dll!77d43a68()
user32.dll!77d43b37()
user32.dll!77d4450d()
user32.dll!77d4453d()
ntdll.dll!77fb4da6()
jsdom.dll!GlobalWindowImpl::Focus() Line 2399 + 0x19 C++
webbrwsr.dll!nsWebBrowser::Activate() Line 1678 C++
mozctl.dll!CMozillaBrowser::OnSetFocus(unsigned int uMsg=7, unsigned int
wParam=0, long lParam=0, int & bHandled=1) Line 505 C++
mozctl.dll!CMozillaBrowser::ProcessWindowMessage(HWND__ * hWnd=0x000b0530,
unsigned int uMsg=7, unsigned int wParam=0, long lParam=0, long & lResult=2032161978,
unsigned long dwMsgMapID=0) Line 170 + 0x28 C++
mozctl.dll!ATL::CWindowImplBaseT<ATL::CWindow,ATL::CWinTraits<1442840576,0>
>::WindowProc(HWND__ * hWnd=0x033e8270, unsigned int uMsg=7, unsigned int wParam=0,
long lParam=0) Line 3006 + 0x23 C++
user32.dll!77d43a68()
user32.dll!77d43b37()
user32.dll!77d45b40()
user32.dll!77d45b5f()
system.windows.forms.dll!System.Windows.Forms.NativeWindow::DefWndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0xbb bytes
system.windows.forms.dll!System.Windows.Forms.Control::DefWndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0x19 bytes
system.windows.forms.dll!System.Windows.Forms.Control::WmSetFocus(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0x117 bytes
system.windows.forms.dll!System.Windows.Forms.Control::WndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0x7bb bytes
system.windows.forms.dll!System.Windows.Forms.AxHost::WndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0x2df bytes
system.windows.forms.dll!ControlNativeWindow::OnMessage(System.Windows.Forms.Message m
= {System.Windows.Forms.Message}) + 0x19 bytes
system.windows.forms.dll!ControlNativeWindow::WndProc(System.Windows.Forms.Message m =
{System.Windows.Forms.Message}) + 0xda bytes
system.windows.forms.dll!System.Windows.Forms.NativeWindow::DebuggableCallback(__int32
hWnd = 722224, __int32 msg = 7, __int32 wparam = 0, __int32 lparam = 0) + 0x39 bytes
user32.dll!77d43a68()
user32.dll!77d43b37()
user32.dll!77d4450d()
user32.dll!77d4453d()
system.windows.forms.dll!System.Windows.Forms.ContainerControl::FocusActiveControlInternal()
+ 0x6e bytes
system.windows.forms.dll!System.Windows.Forms.Form::set_Active(bool value =
true) + 0xdc bytes
system.windows.forms.dll!System.Windows.Forms.Form::WmActivate(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0x42 bytes
system.windows.forms.dll!System.Windows.Forms.Form::WndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0x191 bytes
system.windows.forms.dll!ControlNativeWindow::OnMessage(System.Windows.Forms.Message m
= {System.Windows.Forms.Message}) + 0x19 bytes
system.windows.forms.dll!ControlNativeWindow::WndProc(System.Windows.Forms.Message m =
{System.Windows.Forms.Message}) + 0xda bytes
system.windows.forms.dll!System.Windows.Forms.NativeWindow::DebuggableCallback(__int32
hWnd = 328716, __int32 msg = 6, __int32 wparam = 2, __int32 lparam = 0) + 0x39 bytes
user32.dll!77d43a68()
user32.dll!77d43b37()
user32.dll!77d4450d()
user32.dll!77d4453d()
ntdll.dll!77fb4da6()
user32.dll!77d458e6()
uxtheme.dll!5ad71ae1()
uxtheme.dll!5ad71b48()
user32.dll!77d43a68()
user32.dll!77d43b37()
user32.dll!77d45b40()
user32.dll!77d45b5f()
system.windows.forms.dll!System.Windows.Forms.NativeWindow::DefWndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0xbb bytes
system.windows.forms.dll!System.Windows.Forms.Control::DefWndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0x19 bytes
system.windows.forms.dll!System.Windows.Forms.Form::DefWndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0x111 bytes
system.windows.forms.dll!System.Windows.Forms.Control::WndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0xb10 bytes
system.windows.forms.dll!System.Windows.Forms.ScrollableControl::WndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0x7d bytes
system.windows.forms.dll!System.Windows.Forms.ContainerControl::WndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0x42 bytes
system.windows.forms.dll!System.Windows.Forms.Form::WmNcButtonDown(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0xa4 bytes
system.windows.forms.dll!System.Windows.Forms.Form::WndProc(System.Windows.Forms.Message
m = {System.Windows.Forms.Message}) + 0x181 bytes
system.windows.forms.dll!ControlNativeWindow::OnMessage(System.Windows.Forms.Message m
= {System.Windows.Forms.Message}) + 0x19 bytes
system.windows.forms.dll!ControlNativeWindow::WndProc(System.Windows.Forms.Message m =
{System.Windows.Forms.Message}) + 0xda bytes
system.windows.forms.dll!System.Windows.Forms.NativeWindow::DebuggableCallback(__int32
hWnd = 328716, __int32 msg = 161, __int32 wparam = 2, __int32 lparam = 10551708) +
0x39 bytes
user32.dll!77d43a68()
user32.dll!77d43b37()
user32.dll!77d43d91()
system.windows.forms.dll!System.Windows.Forms.Application::ComponentManagerSystem.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop(__int32
dwComponentID = 1, __int32 reason = -1, __int32 pvLoopData = 0) + 0x2c1 bytes
system.windows.forms.dll!ThreadContext::RunMessageLoop(__int32 reason = -1,
System.Windows.Forms.ApplicationContext context =
{System.Windows.Forms.ApplicationContext}) + 0x1c5 bytes
system.windows.forms.dll!System.Windows.Forms.Application::Run(System.Windows.Forms.Form
mainForm = {MozillaActiveX.Form1}) + 0x36 bytes
MozillaActiveX.exe!MozillaActiveX.Form1.Main() Line 92 C#
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;
namespace MozillaActiveX
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private AxMOZILLACONTROLLib.AxMozillaBrowser axMozillaBrowser1;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
this.SuspendLayout();
this.axMozillaBrowser1.GoHome();
this.ResumeLayout(false);
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new
System.Resources.ResourceManager(typeof(Form1));
this.axMozillaBrowser1 = new
AxMOZILLACONTROLLib.AxMozillaBrowser();
((System.ComponentModel.ISupportInitialize)(this.axMozillaBrowser1)).BeginInit();
this.SuspendLayout();
//
// axMozillaBrowser1
//
this.axMozillaBrowser1.Enabled = true;
this.axMozillaBrowser1.Location = new System.Drawing.Point(16,
72);
this.axMozillaBrowser1.OcxState =
((System.Windows.Forms.AxHost.State)(resources.GetObject("axMozillaBrowser1.OcxState")));
this.axMozillaBrowser1.Size = new System.Drawing.Size(504,
336);
this.axMozillaBrowser1.TabIndex = 0;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(536, 422);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.axMozillaBrowser1});
this.Name = "Form1";
this.Text = "Form1";
((System.ComponentModel.ISupportInitialize)(this.axMozillaBrowser1)).EndInit();
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
}
}
