I am pasting the code to embed browser in SDK environment.code is litle bit 
long so please understand your self 

/*Initialization code*/
void WBROW_InitEmbedding()
{
        VStrPtr envPath = VSTR_New();
        CStr env;
        nsCOMPtr<nsILocalFile> binDir;
        env = ENV_Translate("ND_SOURCE");
        if(env == NULL)
                env = ENV_Translate("ND_HOME");
        if(env)
        {
                VSTR_AppendStrSub(envPath,env,STR_Len(env));
                #if MCH_WIN == MCH_WINX11
                    VSTR_AppendStr(envPath,"/firefox/dll");
                #else
                VSTR_AppendStr(envPath,"\\firefox\\dll");
                #endif
        }
#if MCH_WIN == MCH_WINX11
#ifdef XPCOM_GLUE
        XPCOMGlueStartup(GRE_GetXPCOMPath());
   #endif
#endif
NS_NewNativeLocalFile(nsDependentCString(VSTR_GetStr(envPath)), BOOL_TRUE, 
getter_AddRefs(binDir));
        NS_InitEmbedding(binDir,nsnull);
}

/*
  FUNCTION: StartupProfile()

  PURPOSE: 
*/


nsresult WBROW_StartupProfile()
{


                nsCOMPtr<nsIFile> appDataDir;
                nsresult rv = 
NS_GetSpecialDirectory(NS_APP_APPLICATION_REGISTRY_DIR, 
getter_AddRefs(appDataDir));
                if (NS_FAILED(rv))
                        return rv;
     
                /*appDataDir->Append(NS_LITERAL_STRING("wbrow"));*/
                nsCOMPtr<nsILocalFile> 
localAppDataDir(do_QueryInterface(appDataDir));


                nsCOMPtr<nsProfileDirServiceProvider> locProvider;
                NS_NewProfileDirServiceProvider(PR_TRUE, 
getter_AddRefs(locProvider));
                if (!locProvider)
                        return NS_ERROR_FAILURE;
     
                rv = locProvider->Register();
                if (NS_FAILED(rv))
                                
                        return rv;
                else
                rv = locProvider->SetProfileDir(localAppDataDir);
                #if MCH_WIN == MCH_WINX11
                WBROW_StartAppShell();
                #endif
                return NS_OK;
}

/* InitializeWindowCreator creates and hands off an object with a callback
    to a window creation function. This is how all new windows are opened,
    except any created directly by the embedding app. */
nsresult WBROW_InitializeWindowCreator()
{
     /* create an nsWindowCreator and give it to the WindowWatcher service*/
     WindowCreator *creatorCallback = new WindowCreator();
     if (creatorCallback)
     {
         nsCOMPtr<nsIWindowCreator> 
windowCreator(NS_STATIC_CAST(nsIWindowCreator *, creatorCallback));
         if (windowCreator)
         {
             nsCOMPtr<nsIWindowWatcher> 
wwatch(do_GetService(NS_WINDOWWATCHER_CONTRACTID));
             if (wwatch)
             {
                 wwatch->SetWindowCreator(windowCreator);
                 return NS_OK;
             }
         }
     }
     return NS_ERROR_FAILURE;
}
/*End initialization code*/

________________________________________widnow ceration 
code_________________________________________

/*Firefox headers */
#include "nsDirectoryService.h"
#include "nsDirectoryServiceDefs.h"
#include "nsProfileDirServiceProvider.h"
#include "nsAppDirectoryServiceDefs.h"
#include "nsIWebBrowserFind.h"
#include "WebBrowserChrome.h"
#include "WindowCreator.h"
#include "nsIPrintSettings.h"
#include "nsIWebBrowserPrint.h"
#ifdef _BUILD_STATIC_BIN
#include "nsStaticComponent.h"
nsresult PR_CALLBACK app_getModuleInfo(nsStaticModuleInfo **info, PRUint32 
*count);
#endif

/* Foward declarations of functions included in this code module:*/
LRESULT CALLBACK BrowserWndProc(HWND, UINT, WPARAM, LPARAM);
static BOOL    CALLBACK BrowserDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, 
LPARAM lParam);
static nsresult ResizeEmbedding(nsIWebBrowserChrome* chrome);
/* Profile chooser stuff */
static nsresult StartupProfile();

/* Global variables*/
static UINT gDialogCount = 0;

/*
  FUNCTION: GetBrowserFromChrome()

  PURPOSE: Returns the HWND for the webbrowser container associated
          with the specified chrome.
*/
HWND GetBrowserFromChrome(nsIWebBrowserChrome *aChrome)
{
     if (!aChrome)
     {
         return NULL;
     }
     nsCOMPtr<nsIEmbeddingSiteWindow> baseWindow = do_QueryInterface(aChrome);
     HWND hwnd = NULL;
     baseWindow->GetSiteWindow((void **) & hwnd);
     return hwnd;
}

/*
  FUNCTION: GetBrowserDlgFromChrome()

  PURPOSE: Returns the HWND for the browser dialog associated with
           the specified chrome.
*/
HWND GetBrowserDlgFromChrome(nsIWebBrowserChrome *aChrome)
{
     return GetParent(GetBrowserFromChrome(aChrome));
}

/*
  FUNCTION: ResizeEmbedding()

  PURPOSE: Resizes the webbrowser window to fit its container.
*/



nsresult ResizeEmbedding(nsIWebBrowserChrome* chrome)
{
         if (!chrome)
         return NS_ERROR_FAILURE;
     
     nsCOMPtr<nsIEmbeddingSiteWindow> embeddingSite = do_QueryInterface(chrome);
     HWND hWnd;
     embeddingSite->GetSiteWindow((void **) & hWnd);
     
     if (!hWnd)
         return NS_ERROR_NULL_POINTER;
     
     RECT rect;
     GetClientRect(hWnd, &rect);
     
     /* Make sure the browser is visible and sized*/
     nsCOMPtr<nsIWebBrowser> webBrowser;
     chrome->GetWebBrowser(getter_AddRefs(webBrowser));
     nsCOMPtr<nsIBaseWindow> webBrowserAsWin = do_QueryInterface(webBrowser);
     if (webBrowserAsWin)
     {
                 webBrowserAsWin->SetPositionAndSize(rect.left, 
                                    rect.top, 
                                    rect.right - rect.left, 
                                    rect.bottom - rect.top,
                                    PR_TRUE);

         webBrowserAsWin->SetVisibility(PR_TRUE);
     }


     return NS_OK;
}

/*
  FUNCTION: BrowserDlgProc()

  PURPOSE: Browser dialog windows message handler.

  COMMENTS:

    The code for handling buttons and menu actions is here.
*/


BOOL CALLBACK BrowserDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM 
lParam)
{
     /* Get the browser and other pointers since they are used a lot below*/
        BrowserPtr      BroPtr = (BrowserPtr)GetWindowLong(hwndDlg, 
GWL_USERDATA);
    HWND hwndBrowser;
        nsIWebBrowserChrome *chrome = nsnull ;

        if(!BroPtr)
                return CallWindowProc(m_lpfnOldWndProc, hwndDlg, uMsg, 
wParam,lParam);

        hwndBrowser = (HWND)BroPtr->hWnd;
    if (hwndBrowser)
        chrome = BroPtr->chrome;

    nsCOMPtr<nsIWebBrowser> webBrowser;
    nsCOMPtr<nsIWebNavigation> webNavigation;
    nsCOMPtr<nsIWebBrowserPrint> webBrowserPrint;
    if (chrome)
    {
        chrome->GetWebBrowser(getter_AddRefs(webBrowser));
        webNavigation = do_QueryInterface(webBrowser);
        webBrowserPrint = do_GetInterface(webBrowser);
    }


        /* Test the message*/
     switch (uMsg)
     {
     case WM_SYSCOMMAND:
         if (wParam == SC_CLOSE)
         {
                         if(chrome)
                                WebBrowserChromeUI::Destroy(chrome);
                          return TRUE;
         }
         break;

     case WM_ACTIVATE:
         {
             nsCOMPtr<nsIWebBrowserFocus> focus(do_GetInterface(webBrowser));
             if(focus)
             {
                 switch (wParam)
                 {
                 case WA_ACTIVE:
                     focus->Activate();
                     break;
                 case WA_INACTIVE:
                     focus->Deactivate();
                     break;
                 default:
                     break;
                 }
             }
         }
         break;
             case WM_WINDOWPOSCHANGED:
                        {
                                WgtRectCPtr                     cResbox;
                                WinMetricsRec           met;
                                UInt                            
frameLeft=0,frameTop=0;
                                WgtPtr                          WBrow = 
(WgtPtr)BroPtr->wbrow;
                                WinPtr                          win = 
WGT_GetWin((WgtPtr)WBrow);

                                DefWindowProc(hwndDlg, uMsg, wParam, lParam);
                                /*CallWindowProc(m_lpfnOldWndProc, hwndDlg, 
uMsg, wParam,lParam);*/
                                cResbox = 
WGT_GetBox(WGT_FROMSUBCLASS((WBrowPtr)WBrow));
                                
if(!WinIsControlledByWm(WGT_GetWin((WgtPtr)WBrow)))
                                        {
                                                WinQueryMetrics(win,&met);
                                                frameLeft = met.FrameW;
                                                frameTop  = met.TitleH + 
met.FrameRimH + 
(WIN_GetMenuBar(win)?WinGetMenuHeight(WGT_GetWin((WgtPtr)WBrow)):0);
                                        }
                                MoveWindow(hwndBrowser,
                                                         
cResbox->Ori.x+frameLeft, cResbox->Ori.y+frameTop,
                                                         cResbox->Ext.x,
                                                         cResbox->Ext.y,
                                                         TRUE);
                                if(!WinIsControlledByWm(win))
                                        WIN_DrawFrame(win);
                        
                        }
                return TRUE;
     }
     /*return FALSE;*/
        /*return CallWindowProc(m_lpfnOldWndProc, hwndDlg, uMsg, 
wParam,lParam);*/
         return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
}

/*
  FUNCTION: BrowserWndProc(HWND, unsigned, WORD, LONG)

  PURPOSE:  Processes messages for the browser container window.
*/
LRESULT CALLBACK BrowserWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM 
lParam)
{
        nsIWebBrowserChrome *chrome = nsnull;
    BrowserPtr                  BroPtr =  (BrowserPtr)GetWindowLong(hWnd, 
GWL_USERDATA);
        

        if(BroPtr)
                chrome = (nsIWebBrowserChrome *) BroPtr->chrome;
        else
                return DefWindowProc(hWnd, message, wParam, lParam);
        switch (message) 
     {
        case WM_SIZE:
         /* Resize the embedded browser*/
                 ResizeEmbedding(chrome);
                 return 0;
        case WM_MOUSEACTIVATE:
                {
                
                break;
                }
        case WM_ERASEBKGND:
         /* Reduce flicker by not painting the non-visible background*/
                 if(chrome)
                 {
                return 1;
                 }
                 else
                         break;
     }
     return DefWindowProc(hWnd, message, wParam, lParam);
         /*return CallWindowProc(m_lpfnOldWBrowProc, hWnd, message, 
wParam,lParam);*/
}


//
//  FUNCTION: StartupProfile()
//
//  PURPOSE: 
//
////////////////////////////////////////////////////////////////////////////
// WebBrowserChromeUI

//
//  FUNCTION: CreateNativeWindow()
//
//  PURPOSE: Creates a new browser dialog.
//
//  COMMENTS:
//
//    This function loads the browser dialog from a resource template
//    and returns the HWND for the webbrowser container dialog item
//    to the caller.
//
nativeWindow WebBrowserChromeUI::CreateNativeWindow(nsIWebBrowserChrome* 
chrome,WgtPtr WBrow,Int Index)
{
   /* Load the browser dialog from resource*/
  HWND                          hwndDialog=NULL;
  PRUint32                      chromeFlags;
  HWND                          hwndBrowser;
  NoChromeWinPtr        LoginWin=NULL;
  BrowserPtr            BroPtr = NULL;
  chrome->GetChromeFlags(&chromeFlags);

  ERR_TRACEIN;
  if (((chromeFlags & nsIWebBrowserChrome::CHROME_ALL) == 
nsIWebBrowserChrome::CHROME_ALL) && WBrow)
  {
        
        hwndDialog              = /*cerate native window and set its handler 
here*/
        m_lpfnOldWndProc = 
(FARPROC)SetWindowLong(hwndDialog,GWL_WNDPROC,(long)BrowserDlgProc);
        ::ShowWindow(hwndBrowser, SW_HIDE);
        }
 if (!hwndDialog)
     ERR_TRACERET(NULL);


   SetWindowLong(hwndBrowser, GWL_STYLE, GetWindowLong(hwndBrowser, GWL_STYLE) 
| WS_CLIPCHILDREN);
        
        /* Activate the window */
        PostMessage(hwndDialog, WM_ACTIVATE, WA_ACTIVE, 0);
          
   gDialogCount++;

  ERR_TRACERET(hwndBrowser);
}

/*
 FUNCTION: Destroy()

 PURPOSE: Destroy the window specified by the chrome
*/



void WebBrowserChromeUI::Destroy(nsIWebBrowserChrome* chrome)
{
   nsCOMPtr<nsIWebBrowser> webBrowser;
   nsCOMPtr<nsIWebNavigation> webNavigation;


   chrome->GetWebBrowser(getter_AddRefs(webBrowser));
   webNavigation = do_QueryInterface(webBrowser);
   if (webNavigation)
     webNavigation->Stop(nsIWebNavigation::STOP_ALL);


   chrome->ExitModalEventLoop(NS_OK);


   HWND hwndDlg = GetBrowserDlgFromChrome(chrome);
   if (hwndDlg == NULL)
     return;


   /* Explicitly destroy the embedded browser and then the chrome*/
   /* First the browser*/
   nsCOMPtr<nsIWebBrowser> browser = nsnull;
   chrome->GetWebBrowser(getter_AddRefs(browser));
   nsCOMPtr<nsIBaseWindow> browserAsWin = do_QueryInterface(browser);
   if (browserAsWin)
     browserAsWin->Destroy();

   /* Now the chrome*/
   chrome->SetWebBrowser(nsnull);
   NS_RELEASE(chrome);
}

/*
 FUNCTION: Called as the final act of a chrome object during its destructor
*/
void WebBrowserChromeUI::Destroyed(nsIWebBrowserChrome* chrome)
{
    // Clear the window user data
        HWND hwndBrowser = GetBrowserFromChrome(chrome);
        HWND hwndBroCont = GetBrowserDlgFromChrome(chrome);
        WinPtr  win = MSW_MswWindowGetWin(GetParent(hwndBrowser));
        WinPtr  winCont = MSW_MswWindowGetWin(hwndBroCont);

    SetWindowLong(hwndBrowser, GWL_USERDATA, nsnull);

        DestroyWindow(hwndBrowser);
           
    --gDialogCount;
    if (gDialogCount == 0)
    {
        // Quit when there are no more browser objects
        PostQuitMessage(0);
    }
}

//
// FUNCTION: Set the input focus onto the browser window
//
void WebBrowserChromeUI::SetFocus(nsIWebBrowserChrome *chrome)
{
     HWND hwndBrowser = GetBrowserFromChrome(chrome);
    ::SetFocus(hwndBrowser);
}


//
//  FUNCTION: UpdateStatusBarText()
//
//  PURPOSE: Set the status bar text.
//
void WebBrowserChromeUI::UpdateStatusBarText(nsIWebBrowserChrome *aChrome, 
const PRUnichar* aStatusText)
{
         BrowserPtr     BroPtr = 
(BrowserPtr)GetWindowLong(GetBrowserFromChrome(aChrome), GWL_USERDATA);
         nsCString status; 
     if (aStatusText)
         status.AssignWithConversion(aStatusText);
}
//
//  FUNCTION: UpdateTabText()
//
//  PURPOSE: Set the avtive tab text.
//
void WebBrowserChromeUI::UpdateTabText(nsIWebBrowserChrome *aChrome, const 
PRUnichar* aStatusText)
{
     BrowserPtr BroPtr = 
(BrowserPtr)GetWindowLong(GetBrowserFromChrome(aChrome), GWL_USERDATA);
         Int tab;
         nsCString status; 
     if (aStatusText)
         status.AssignWithConversion(aStatusText);
}
//
//  FUNCTION: UpdateCurrentURI()
//
//  PURPOSE: Updates the URL address field
//
void WebBrowserChromeUI::UpdateCurrentURI(nsIWebBrowserChrome *aChrome)
{
     nsCOMPtr<nsIWebBrowser> webBrowser;
     nsCOMPtr<nsIWebNavigation> webNavigation;
     aChrome->GetWebBrowser(getter_AddRefs(webBrowser));
     webNavigation = do_QueryInterface(webBrowser);


     nsCOMPtr<nsIURI> currentURI;
     webNavigation->GetCurrentURI(getter_AddRefs(currentURI));
     if (currentURI)
     {
         nsCAutoString uriString;
         currentURI->GetAsciiSpec(uriString);
     }
}

//
//  FUNCTION: UpdateBusyState()
//
//  PURPOSE: Refreshes the stop/go buttons in the browser dialog
//
void WebBrowserChromeUI::UpdateBusyState(nsIWebBrowserChrome *aChrome, PRBool 
aBusy)
{
        // TODO code to show a tooltip should go here

}

//
//  FUNCTION: UpdateProgress()
//
//  PURPOSE: Refreshes the progress bar in the browser dialog
//
void WebBrowserChromeUI::UpdateProgress(nsIWebBrowserChrome *aChrome, PRInt32 
aCurrent, PRInt32 aMax)
{
    BrowserPtr  BroPtr = 
(BrowserPtr)GetWindowLong(GetBrowserFromChrome(aChrome), GWL_USERDATA);

        if(aCurrent < 0)
                aCurrent = 0;
         if (aCurrent > aMax)
    {
        aMax = aCurrent + 20; 
    }
}

//
//  FUNCTION: ShowContextMenu()
//
//  PURPOSE: Display a context menu for the given node
//
void WebBrowserChromeUI::ShowContextMenu(nsIWebBrowserChrome *aChrome, PRUint32 
aContextFlags, nsIDOMEvent *aEvent, nsIDOMNode *aNode)
{
     // TODO code to test context flags and display a popup menu should go here
        Int type;

        ERR_TRACEIN;

        if(BroPtr == NULL)
        {
                ERR_TRACEOUT;
        }

        if(aContextFlags & nsIContextMenuListener::CONTEXT_LINK)
                type = 1;
        else if(aContextFlags & nsIContextMenuListener::CONTEXT_IMAGE)          
                type = 2;
        else if(aContextFlags & nsIContextMenuListener::CONTEXT_DOCUMENT)
                type = 4;
        else if(aContextFlags & nsIContextMenuListener::CONTEXT_TEXT)
                type = 8;
        
        ERR_TRACEOUT;
        
}

//
//  FUNCTION: ShowTooltip()
//
//  PURPOSE: Show a tooltip
//
void WebBrowserChromeUI::ShowTooltip(nsIWebBrowserChrome *aChrome, PRInt32 
aXCoords, PRInt32 aYCoords, const PRUnichar *aTipText)
{
     // TODO code to show a tooltip should go here
}

//
//  FUNCTION: HideTooltip()
//
//  PURPOSE: Hide the tooltip
//
void WebBrowserChromeUI::HideTooltip(nsIWebBrowserChrome *aChrome)
{
     // TODO code to hide a tooltip should go here
}

void WebBrowserChromeUI::ShowWindow(nsIWebBrowserChrome *aChrome, PRBool aShow)
{
  HWND win = GetBrowserDlgFromChrome(aChrome);
   ::ShowWindow(win, aShow ? SW_SHOW : SW_HIDE);
}

void WebBrowserChromeUI::SizeTo(nsIWebBrowserChrome *aChrome, PRInt32 aWidth, 
PRInt32 aHeight)
{
   HWND hchrome = GetBrowserDlgFromChrome(aChrome);
   HWND hbrowser = GetBrowserFromChrome(aChrome);
   RECT chromeRect, browserRect;


   ::GetWindowRect(hchrome,  &chromeRect);
   ::GetWindowRect(hbrowser, &browserRect);


   PRInt32 decoration_x = (browserRect.left - chromeRect.left) + 
                          (chromeRect.right - browserRect.right);
   PRInt32 decoration_y = (browserRect.top - chromeRect.top) + 
                          (chromeRect.bottom - browserRect.bottom);


   if((aWidth+decoration_x) > (browserRect.right-browserRect.left))
           aWidth = aWidth+decoration_x;
   else
                aWidth = browserRect.right-browserRect.left;

   if((aHeight+decoration_y) > (browserRect.bottom-browserRect.top))
           aHeight = aHeight+decoration_y;
   else
                aHeight = browserRect.bottom-browserRect.top;


   /*::MoveWindow(hchrome, chromeRect.left, chromeRect.top,
       aWidth+decoration_x,
       aHeight+decoration_y, TRUE);*/
   ::MoveWindow(hchrome, chromeRect.left, chromeRect.top,
       aWidth,
       aHeight, TRUE);
}

//-----------------------------------------------------------------------------
// AppCallbacks
//-----------------------------------------------------------------------------
nsresult AppCallbacks::CreateBrowserWindow(PRUint32 aChromeFlags,
            nsIWebBrowserChrome *aParent,
            nsIWebBrowserChrome **aNewWindow,WgtPtr WBrow,Int Index)
{
   WebBrowserChrome * chrome = new WebBrowserChrome();
   if (!chrome)
     return NS_ERROR_FAILURE;


   // the interface to return and one addref, which we assume will be
   // immediately released
   CallQueryInterface(NS_STATIC_CAST(nsIWebBrowserChrome*, chrome), aNewWindow);
   // now an extra addref; the window owns itself (to be released by
   // WebBrowserChromeUI::Destroy)
   NS_ADDREF(*aNewWindow);

   chrome->SetChromeFlags(aChromeFlags);
   chrome->SetParent(aParent);

   // Insert the browser
   nsCOMPtr<nsIWebBrowser> newBrowser;
   chrome->CreateBrowser(-1, -1, -1, -1, 
getter_AddRefs(newBrowser),WBrow,Index);
   if (!newBrowser)
     return NS_ERROR_FAILURE;

   /* Place it where we want it.*/
   ResizeEmbedding(NS_STATIC_CAST(nsIWebBrowserChrome*, chrome));

   /* if opened as chrome, it'll be made visible after the chrome has loaded.*/
   /* otherwise, go ahead and show it now.*/
   if (!(aChromeFlags & nsIWebBrowserChrome::CHROME_OPENAS_CHROME))
     WebBrowserChromeUI::ShowWindow(*aNewWindow, PR_TRUE);

   return NS_OK;
}

void AppCallbacks::EnableChromeWindow(nsIWebBrowserChrome *aWindow,PRBool 
aEnabled)
{
   HWND hwnd = GetBrowserDlgFromChrome(aWindow);
   ::EnableWindow(hwnd, aEnabled ? TRUE : FALSE);
}

PRUint32 AppCallbacks::RunEventLoop(PRBool &aRunCondition)
{
   MSG msg;
    HANDLE hFakeEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);


    while (aRunCondition ) {
      /* Process pending messages*/
     while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
       if (!::GetMessage(&msg, NULL, 0, 0)) {
         /* WM_QUIT*/
         aRunCondition = PR_FALSE;
          break;
        }


        PRBool wasHandled = PR_FALSE;
        ::NS_HandleEmbeddingEvent(msg, wasHandled);
        if (wasHandled)
          continue;


        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
      }


      /* Do idle stuff*/
     ::MsgWaitForMultipleObjects(1, &hFakeEvent, FALSE, 100, QS_ALLEVENTS);
    }
    ::CloseHandle(hFakeEvent);
    return msg.wParam;
}
Int S_MswRegisterWindowClass (Str cname)
{
        HWND                    hWnd =NULL;
        HINSTANCE               hInst;

        WNDCLASS                cls;
                
        hInst = (HINSTANCE)MSWOS_GetInstance();
        if (GetClassInfo(hInst, cname, &cls) == 0) {
                cls.style = CS_HREDRAW | CS_VREDRAW;
                cls.cbClsExtra  = 0;
                cls.hInstance           = hInst;
                cls.hIcon               = NULL;
                cls.hCursor             = NULL;
                cls.hbrBackground       = (HBRUSH)GetStockObject(WHITE_BRUSH);
                cls.lpszMenuName        = NULL;
                cls.lpszClassName       = cname;
                cls.lpfnWndProc = BrowserWndProc;
                cls.cbWndExtra  = 3 * sizeof(WinPtr);

                if (RegisterClass(&cls) == BOOL_FALSE) {
                        return FALSE;
                }
        }
        return TRUE;
        
        

}

HWND WBROW_CreateBrowWin(HINSTANCE hInst,WgtPtr wbrow,LPRECT lpRect,HWND 
hWndApp)
{
                Str                     nameStr;
                HWND            WBrowWin=NULL;
                C_STATIC        Int     sWBrowWin;
                WinChildFlagsSetEnum    winFlags = 0;
                WinPtr          win=NULL;

                nameStr = (Str)PTR_New(128*sizeof(Char));
                STR_Sprintf(nameStr, "OI_X%4x_%6d", hInst, 0xff);
                if(!S_MswRegisterWindowClass(nameStr))
                        goto error;
                
                /*      create the document Window */

        WBrowWin         = CreateWindow(
                        nameStr,
                        NULL,
                                                WS_CHILD | WS_VISIBLE 
|WS_BORDER, 
                        lpRect->left,
                        lpRect->top ,
                        lpRect->right,
                        lpRect->bottom,
                        hWndApp,
                        NULL,
                        hInst,
                        NULL);
                
                PTR_Dispose(nameStr);
                return WBrowWin;
error:
                PTR_Dispose(nameStr);
        return NULL;
}
/*End Widnow creatin code*/

/*Chrome ceration code*/

WebBrowserChrome::WebBrowserChrome()
{
    mNativeWindow = nsnull;
    mSizeSet      = PR_FALSE;
}

WebBrowserChrome::~WebBrowserChrome()
{
    WebBrowserChromeUI::Destroyed(this);
}

nsresult WebBrowserChrome::CreateBrowser(PRInt32 aX, PRInt32 aY,
                                         PRInt32 aCX, PRInt32 aCY,
                                         nsIWebBrowser **aBrowser,WgtPtr 
wbrow,Int Index)
{
    NS_ENSURE_ARG_POINTER(aBrowser);
    *aBrowser = nsnull;

    mWebBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID);
    
    if (!mWebBrowser)
        return NS_ERROR_FAILURE;

    (void)mWebBrowser->SetContainerWindow(NS_STATIC_CAST(nsIWebBrowserChrome*, 
this));

    nsCOMPtr<nsIDocShellTreeItem> dsti = do_QueryInterface(mWebBrowser);
    dsti->SetItemType(nsIDocShellTreeItem::typeContentWrapper);

    nsCOMPtr<nsIBaseWindow> browserBaseWindow = do_QueryInterface(mWebBrowser);

    mNativeWindow = 
WebBrowserChromeUI::CreateNativeWindow(NS_STATIC_CAST(nsIWebBrowserChrome*, 
this),wbrow,Index);

    if (!mNativeWindow)
        return NS_ERROR_FAILURE;
        #if MCH_WIN == MCH_WINMSW
    nsresult rv = browserBaseWindow->InitWindow( mNativeWindow,
                             nsnull, 
                             aX, aY, aCX, aCY);
        #else
        nsresult rv = browserBaseWindow->InitWindow( 
nsNativeWidget(mNativeWindow),
                             nsnull, 
                             aX, aY, aCX, aCY);
        #endif
    browserBaseWindow->Create();

    nsCOMPtr<nsIWebProgressListener> 
listener(NS_STATIC_CAST(nsIWebProgressListener*, this));
    nsCOMPtr<nsIWeakReference> thisListener(do_GetWeakReference(listener));
    (void)mWebBrowser->AddWebBrowserListener(thisListener, 
        NS_GET_IID(nsIWebProgressListener));

    /* The window has been created. Now register for history notifications*/
    mWebBrowser->AddWebBrowserListener(thisListener, 
NS_GET_IID(nsISHistoryListener));

    if (mWebBrowser)
    {
      *aBrowser = mWebBrowser;
      NS_ADDREF(*aBrowser);
      return NS_OK;
    }
    return NS_ERROR_FAILURE;
}

/*****************************************************************************/
/* WebBrowserChrome::nsISupports */
/*****************************************************************************/

NS_IMPL_ADDREF(WebBrowserChrome)
NS_IMPL_RELEASE(WebBrowserChrome)

NS_INTERFACE_MAP_BEGIN(WebBrowserChrome)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIWebBrowserChrome)
   NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)
   NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome)
   NS_INTERFACE_MAP_ENTRY(nsIEmbeddingSiteWindow)
   NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener) /* optional*/
   NS_INTERFACE_MAP_ENTRY(nsISHistoryListener)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsIObserver)
   NS_INTERFACE_MAP_ENTRY(nsIContextMenuListener)
   NS_INTERFACE_MAP_ENTRY(nsITooltipListener)
NS_INTERFACE_MAP_END

/*****************************************************************************
 WebBrowserChrome::nsIInterfaceRequestor
*****************************************************************************/  

NS_IMETHODIMP WebBrowserChrome::GetInterface(const nsIID &aIID, void** 
aInstancePtr)
{
    NS_ENSURE_ARG_POINTER(aInstancePtr);

    *aInstancePtr = 0;
    if (aIID.Equals(NS_GET_IID(nsIDOMWindow)))
    {
        if (mWebBrowser)
        {
            return mWebBrowser->GetContentDOMWindow((nsIDOMWindow **) 
aInstancePtr);
        }
        return NS_ERROR_NOT_INITIALIZED;
    }
    return QueryInterface(aIID, aInstancePtr);
}

/*****************************************************************************
 WebBrowserChrome::nsIWebBrowserChrome
*****************************************************************************/  
 

NS_IMETHODIMP WebBrowserChrome::SetStatus(PRUint32 aType, const PRUnichar* 
aStatus)
{
    WebBrowserChromeUI::UpdateStatusBarText(this, aStatus);
    return NS_OK;
}

NS_IMETHODIMP WebBrowserChrome::GetWebBrowser(nsIWebBrowser** aWebBrowser)
{
    NS_ENSURE_ARG_POINTER(aWebBrowser);
    *aWebBrowser = mWebBrowser;
    NS_IF_ADDREF(*aWebBrowser);
    return NS_OK;
}

NS_IMETHODIMP WebBrowserChrome::SetWebBrowser(nsIWebBrowser* aWebBrowser)
{
    mWebBrowser = aWebBrowser;
    return NS_OK;
}

NS_IMETHODIMP WebBrowserChrome::GetChromeFlags(PRUint32* aChromeMask)
{
    *aChromeMask = mChromeFlags;
    return NS_OK;
}

NS_IMETHODIMP WebBrowserChrome::SetChromeFlags(PRUint32 aChromeMask)
{
    mChromeFlags = aChromeMask;
    return NS_OK;
}

NS_IMETHODIMP WebBrowserChrome::DestroyBrowserWindow(void)
{
    WebBrowserChromeUI::Destroy(this);
    return NS_OK;
}


/* IN: The desired browser client area dimensions.*/
NS_IMETHODIMP WebBrowserChrome::SizeBrowserTo(PRInt32 aWidth, PRInt32 aHeight)
{
  /* This isn't exactly correct: we're setting the whole window to
     the size requested for the browser. At time of writing, though,
     it's fine and useful for winEmbed's purposes. */
  WebBrowserChromeUI::SizeTo(this, aWidth, aHeight);
  mSizeSet = PR_TRUE;
  return NS_OK;
}


NS_IMETHODIMP WebBrowserChrome::ShowAsModal(void)
{
  nsCOMPtr<nsIWebBrowser> browser = nsnull;
  this->GetWebBrowser(getter_AddRefs(browser));
  nsCOMPtr<nsIBaseWindow> browserAsWin = do_QueryInterface(browser);
  /* Copied from nsXULWindow */
  nsCOMPtr<nsIAppShell> appShell(do_CreateInstance(kAppShellCID));
  if (!appShell)
    return NS_ERROR_FAILURE;

  appShell->Create(0, nsnull);
  appShell->Spinup();
  // Store locally so it doesn't die on us
  nsCOMPtr<nsIWidget> window;
  browserAsWin->GetMainWidget(getter_AddRefs(window));

  window->SetModal(PR_TRUE);
  mContinueModalLoop = PR_TRUE;
  
  nsCOMPtr<nsIJSContextStack> 
stack(do_GetService("@mozilla.org/js/xpc/ContextStack;1"));
  nsresult rv = NS_OK;
  if (stack && NS_SUCCEEDED(stack->Push(nsnull))) {
    while (NS_SUCCEEDED(rv) && mContinueModalLoop) {
      void* data;
      PRBool isRealEvent;
      PRBool processEvent;

      rv = appShell->GetNativeEvent(isRealEvent, data);
                data = nsnull;
      if (NS_SUCCEEDED(rv)) {
        window->ModalEventFilter(isRealEvent, data, &processEvent);
        if (processEvent)
          appShell->DispatchNativeEvent(isRealEvent, data);
      }
    }

    JSContext* cx;
    stack->Pop(&cx);
    NS_ASSERTION(!cx, "JSContextStack mismatch");
  } else
    rv = NS_ERROR_FAILURE;

  mContinueModalLoop = PR_FALSE;
  window->SetModal(PR_FALSE);
  appShell->Spindown();
  if (mDependentParent)
    AppCallbacks::EnableChromeWindow(mDependentParent, PR_TRUE);
  return NS_OK;
}

NS_IMETHODIMP WebBrowserChrome::IsWindowModal(PRBool *_retval)
{
    *_retval = PR_FALSE;
     return NS_ERROR_NOT_IMPLEMENTED;
}

NS_IMETHODIMP WebBrowserChrome::ExitModalEventLoop(nsresult aStatus)
{
  WinPtr win;
  mContinueModalLoop = PR_FALSE;
  return NS_OK;
}

/*****************************************************************************
 WebBrowserChrome::nsIWebBrowserChromeFocus
*****************************************************************************/

NS_IMETHODIMP WebBrowserChrome::FocusNextElement()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

NS_IMETHODIMP WebBrowserChrome::FocusPrevElement()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/*****************************************************************************
 WebBrowserChrome::nsIWebProgressListener
*****************************************************************************/

NS_IMETHODIMP WebBrowserChrome::OnProgressChange(nsIWebProgress *progress, 
nsIRequest *request,
                                                  PRInt32 curSelfProgress, 
PRInt32 maxSelfProgress,
                                                  PRInt32 curTotalProgress, 
PRInt32 maxTotalProgress)
{
    WebBrowserChromeUI::UpdateProgress(this, curTotalProgress, 
maxTotalProgress);
    return NS_OK;
}

NS_IMETHODIMP WebBrowserChrome::OnStateChange(nsIWebProgress *progress, 
nsIRequest *request,
                                               PRUint32 progressStateFlags, 
nsresult status)
{
    if ((progressStateFlags & STATE_START) && (progressStateFlags & 
STATE_IS_DOCUMENT))
    {
        WebBrowserChromeUI::UpdateBusyState(this, PR_TRUE);
    }

    if ((progressStateFlags & STATE_STOP) && (progressStateFlags & 
STATE_IS_DOCUMENT))
    {
        WebBrowserChromeUI::UpdateBusyState(this, PR_FALSE);
        WebBrowserChromeUI::UpdateProgress(this, 0, 100);
        WebBrowserChromeUI::UpdateStatusBarText(this, nsnull);
        ContentFinishedLoading();
    }

    return NS_OK;
}


NS_IMETHODIMP WebBrowserChrome::OnLocationChange(nsIWebProgress* aWebProgress,
                                                 nsIRequest* aRequest,
                                                 nsIURI *location)
{
  PRBool isSubFrameLoad = PR_FALSE; /* Is this a subframe load*/
  if (aWebProgress) {
    nsCOMPtr<nsIDOMWindow>  domWindow;
    nsCOMPtr<nsIDOMWindow>  topDomWindow;
    aWebProgress->GetDOMWindow(getter_AddRefs(domWindow));
    if (domWindow) {  /*Get root domWindow*/
      domWindow->GetTop(getter_AddRefs(topDomWindow));
    }
    if (domWindow != topDomWindow)
      isSubFrameLoad = PR_TRUE;
  }
  if (!isSubFrameLoad)
    WebBrowserChromeUI::UpdateCurrentURI(this);
  return NS_OK;
}

NS_IMETHODIMP 
WebBrowserChrome::OnStatusChange(nsIWebProgress* aWebProgress,
                                 nsIRequest* aRequest,
                                 nsresult aStatus,
                                 const PRUnichar* aMessage)
{
    WebBrowserChromeUI::UpdateStatusBarText(this, aMessage);
    return NS_OK;
}



NS_IMETHODIMP 
WebBrowserChrome::OnSecurityChange(nsIWebProgress *aWebProgress, 
                                    nsIRequest *aRequest, 
                                    PRUint32 state)
{
    return NS_OK;
}

//*****************************************************************************
// WebBrowserChrome::nsISHistoryListener
//***************************************************************************** 
  

NS_IMETHODIMP
WebBrowserChrome::OnHistoryNewEntry(nsIURI * aNewURI)
{
    return SendHistoryStatusMessage(aNewURI, "add");
}

NS_IMETHODIMP
WebBrowserChrome::OnHistoryGoBack(nsIURI * aBackURI, PRBool * aContinue)
{
    // For now, let the operation continue
    *aContinue = PR_TRUE;
    return SendHistoryStatusMessage(aBackURI, "back");
}


NS_IMETHODIMP
WebBrowserChrome::OnHistoryGoForward(nsIURI * aForwardURI, PRBool * aContinue)
{
    // For now, let the operation continue
    *aContinue = PR_TRUE;
    return SendHistoryStatusMessage(aForwardURI, "forward");
}


NS_IMETHODIMP
WebBrowserChrome::OnHistoryGotoIndex(PRInt32 aIndex, nsIURI * aGotoURI, PRBool 
* aContinue)
{
    // For now, let the operation continue
    *aContinue = PR_TRUE;
    return SendHistoryStatusMessage(aGotoURI, "goto", aIndex);
}

NS_IMETHODIMP
WebBrowserChrome::OnHistoryReload(nsIURI * aURI, PRUint32 aReloadFlags, PRBool 
* aContinue)
{
    // For now, let the operation continue
    *aContinue = PR_TRUE;
    return SendHistoryStatusMessage(aURI, "reload", 0 /* no info to pass here 
*/, aReloadFlags);
}

NS_IMETHODIMP
WebBrowserChrome::OnHistoryPurge(PRInt32 aNumEntries, PRBool *aContinue)
{
    // For now let the operation continue
    *aContinue = PR_FALSE;
    return SendHistoryStatusMessage(nsnull, "purge", aNumEntries);
}

nsresult
WebBrowserChrome::SendHistoryStatusMessage(nsIURI * aURI, char * operation, 
PRInt32 info1, PRUint32 aReloadFlags)
{
    nsCAutoString uriCStr;
    if (aURI)
    {
        aURI->GetSpec(uriCStr);
    }

    nsString uriAStr;

    if(!(nsCRT::strcmp(operation, "back")))
    {
        // Going back. XXX Get string from a resource file
        uriAStr.Append(NS_LITERAL_STRING("Going back to url:"));
        uriAStr.Append(NS_ConvertUTF8toUCS2(uriCStr));
    }
    else if (!(nsCRT::strcmp(operation, "forward")))
    {
        // Going forward. XXX Get string from a resource file
        uriAStr.Append(NS_LITERAL_STRING("Going forward to url:"));
        uriAStr.Append(NS_ConvertUTF8toUCS2(uriCStr));
    }
    else if (!(nsCRT::strcmp(operation, "reload")))
    {
        // Reloading. XXX Get string from a resource file
        if (aReloadFlags & nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY && 
            aReloadFlags & nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE)
        {
            uriAStr.Append(NS_LITERAL_STRING("Reloading url,(bypassing proxy 
and cache) :"));
        }
        else if (aReloadFlags & nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY)
        {
            uriAStr.Append(NS_LITERAL_STRING("Reloading url, (bypassing 
proxy):"));
        }
        else if (aReloadFlags & nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE)
        {
            uriAStr.Append(NS_LITERAL_STRING("Reloading url, (bypassing 
cache):"));
        }
        else
        {
            uriAStr.Append(NS_LITERAL_STRING("Reloading url, (normal):"));
        }
        uriAStr.Append(NS_ConvertASCIItoUCS2(uriCStr));
    }
    else if (!(nsCRT::strcmp(operation, "add")))
    {
        // Adding new entry. XXX Get string from a resource file
        uriAStr.Append(NS_ConvertASCIItoUCS2(uriCStr));
        uriAStr.Append(NS_LITERAL_STRING(" added to session History"));
    }
    else if (!(nsCRT::strcmp(operation, "goto")))
    {
        // Goto. XXX Get string from a resource file
        uriAStr.Append(NS_LITERAL_STRING("Going to HistoryIndex:"));
        uriAStr.AppendInt(info1);
        uriAStr.Append(NS_LITERAL_STRING(" Url:"));
        uriAStr.Append(NS_ConvertASCIItoUCS2(uriCStr));
    }
    else if (!(nsCRT::strcmp(operation, "purge")))
    {
        // Purging old entries
        uriAStr.AppendInt(info1);
        uriAStr.Append(NS_LITERAL_STRING(" purged from Session History"));
    }

    WebBrowserChromeUI::UpdateStatusBarText(this, uriAStr.get());

    return NS_OK;
}

void WebBrowserChrome::ContentFinishedLoading()
{
  // if it was a chrome window and no one has already specified a size,
  // size to content
  if (mWebBrowser && !mSizeSet &&
     (mChromeFlags & nsIWebBrowserChrome::CHROME_OPENAS_CHROME)) {
    nsCOMPtr<nsIDOMWindow> contentWin;
    mWebBrowser->GetContentDOMWindow(getter_AddRefs(contentWin));
    if (contentWin)
        contentWin->SizeToContent();
    WebBrowserChromeUI::ShowWindow(this, PR_TRUE);
  }
}


//*****************************************************************************
// WebBrowserChrome::nsIEmbeddingSiteWindow
//***************************************************************************** 
  

NS_IMETHODIMP WebBrowserChrome::SetDimensions(PRUint32 aFlags, PRInt32 x, 
PRInt32 y, PRInt32 cx, PRInt32 cy)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

NS_IMETHODIMP WebBrowserChrome::GetDimensions(PRUint32 aFlags, PRInt32 *x, 
PRInt32 *y, PRInt32 *cx, PRInt32 *cy)
{
    if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_POSITION)
    {
        *x = 0;
        *y = 0;
    }
    if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_INNER ||
        aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_OUTER)
    {
        *cx = 0;
        *cy = 0;
    }
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setFocus (); */
NS_IMETHODIMP WebBrowserChrome::SetFocus()
{
    WebBrowserChromeUI::SetFocus(this);
    return NS_OK;
}

/* attribute wstring title; */
NS_IMETHODIMP WebBrowserChrome::GetTitle(PRUnichar * *aTitle)
{
   NS_ENSURE_ARG_POINTER(aTitle);

   *aTitle = nsnull;
   
   return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP WebBrowserChrome::SetTitle(const PRUnichar * aTitle)
{
        WebBrowserChromeUI::UpdateTabText(this,aTitle);
    return NS_OK;
}

/* attribute boolean visibility; */
NS_IMETHODIMP WebBrowserChrome::GetVisibility(PRBool * aVisibility)
{
    NS_ENSURE_ARG_POINTER(aVisibility);
    *aVisibility = PR_TRUE;
    return NS_OK;
}
NS_IMETHODIMP WebBrowserChrome::SetVisibility(PRBool aVisibility)
{
    return NS_OK;
}

/* attribute nativeSiteWindow siteWindow */
NS_IMETHODIMP WebBrowserChrome::GetSiteWindow(void * *aSiteWindow)
{
   NS_ENSURE_ARG_POINTER(aSiteWindow);
   #if MCH_WIN == MCH_WINMSW
   *aSiteWindow = mNativeWindow;
   #else
   *aSiteWindow = (void *)mNativeWindow;
   #endif 
   return NS_OK;
}


//*****************************************************************************
// WebBrowserChrome::nsIObserver
//***************************************************************************** 
  

NS_IMETHODIMP WebBrowserChrome::Observe(nsISupports *aSubject, const char 
*aTopic, const PRUnichar *someData)
{
    nsresult rv = NS_OK;
    if (nsCRT::strcmp(aTopic, "profile-change-teardown") == 0)
    {
        // A profile change means death for this window
        WebBrowserChromeUI::Destroy(this);
    }
    return rv;
}

//*****************************************************************************
// WebBrowserChrome::nsIContextMenuListener
//***************************************************************************** 
  

/* void OnShowContextMenu (in unsigned long aContextFlags, in nsIDOMEvent 
aEvent, in nsIDOMNode aNode); */
NS_IMETHODIMP WebBrowserChrome::OnShowContextMenu(PRUint32 aContextFlags, 
nsIDOMEvent *aEvent, nsIDOMNode *aNode)
{
    WebBrowserChromeUI::ShowContextMenu(this, aContextFlags, aEvent, aNode);
    return NS_OK;
}

//*****************************************************************************
// WebBrowserChrome::nsITooltipListener
//***************************************************************************** 
  

/* void OnShowTooltip (in long aXCoords, in long aYCoords, in wstring 
aTipText); */
NS_IMETHODIMP WebBrowserChrome::OnShowTooltip(PRInt32 aXCoords, PRInt32 
aYCoords, const PRUnichar *aTipText)
{
    WebBrowserChromeUI::ShowTooltip(this, aXCoords, aYCoords, aTipText);
    return NS_OK;
}

/* void OnHideTooltip (); */
NS_IMETHODIMP WebBrowserChrome::OnHideTooltip()
{
    WebBrowserChromeUI::HideTooltip(this);
    return NS_OK;

}
/*end chrome creation code*/



Hope that messy code help your some extent.further query accepted

Neeraj
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf Of Callum Prentice
Sent: Saturday, July 09, 2005 4:37 AM
To: [email protected]
Subject: Statically linked build of an application that embeds Gecko
using MSVC


Does anyone know how to build a Gecko embedding application that is
statically linked against the Mozilla SDK using MSVC 6.0 or MSVC.net
rather than makefiles?

I understand that it's possible but everything I've tried has failed
for one reason or another - any advice or examples appreciated.

I know that the makefiles use tools like sed to generate some of the
makefile input but I can always do that as a separate process once when
I know the magic fu that's required.

Callum.

_______________________________________________
mozilla-embedding mailing list
[email protected]
http://mail.mozilla.org/listinfo/mozilla-embedding

_______________________________________________
mozilla-embedding mailing list
[email protected]
http://mail.mozilla.org/listinfo/mozilla-embedding

Reply via email to