/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is RaptorCanvas. * * The Initial Developer of the Original Code is Kirk Baker and * Ian Wilkinson. Portions created by Kirk Baker and Ian Wilkinson are * Copyright (C) 1999 Kirk Baker and Ian Wilkinson. All * Rights Reserved. * * Contributor(s): Kirk Baker * Ian Wilkinson * Mark Lin * Mark Goddard * Ed Burns * Ashutosh Kulkarni * Ann Sunhachawee */ #ifndef NativeBrowserControl_h #define NativeBrowserControl_h #include #include // for all Navigation commands #include #include #ifdef XP_PC #include // for HWND #endif #include "ns_util.h" class EmbedProgress; class EmbedWindow; class EmbedEventListener; class NativeWrapperFactory; class nsPIDOMWindow; /** *

Native analog to BrowserControl. Hosts per-window things. Maps * closely to EmbedPrivate in GtkEmbed.

* */ class NativeBrowserControl { public: NativeBrowserControl(); ~NativeBrowserControl(); // // public API // nsresult Init (NativeWrapperFactory *yourWrapperFactory); nsresult Realize (jobject javaBrowserControl, void* parentWinPtr, PRBool *aAlreadyRealized, PRUint32 width, PRUint32 height); void Unrealize (void); void Show (void); void Hide (void); void Resize (PRUint32 x, PRUint32 y, PRUint32 aWidth, PRUint32 aHeight); void Destroy (void); void TopLevelFocusIn (void); void TopLevelFocusOut(void); NativeWrapperFactory * GetWrapperFactory(); jobject QueryInterfaceJava(WEBCLIENT_INTERFACES interface); // This is an upcall that will come from the progress listener // whenever there is a content state change. We need this so we can // attach event listeners. void ContentStateChange (void); nsresult SetNewWindowListenerAttached(PRBool newState); nsresult GetNewWindowListenerAttached(PRBool *_retval); private: void GetListener (void); void AttachListeners(void); void DetachListeners(void); // this will get the PIDOMWindow for this widget nsresult GetPIDOMWindow (nsPIDOMWindow **aPIWin); public: // // Relationship ivars // #if defined(XP_UNIX) &&!defined(XP_MACOSX) GtkWidget * parentHWnd; #elif defined(XP_MAC) || defined(XP_MACOSX) void * parentHWnd; #else !defined(XP_MACOSX) HWND parentHWnd; #endif nsCOMPtr mNavigation; nsCOMPtr mSessionHistory; // our event receiver nsCOMPtr mEventReceiver; EmbedWindow * mWindow; nsCOMPtr mWindowGuard; EmbedProgress * mProgress; nsCOMPtr mProgressGuard; EmbedEventListener *mEventListener; nsCOMPtr mEventListenerGuard; ShareInitContext mShareContext; // chrome mask PRUint32 mChromeMask; // is this a chrome window? PRBool mIsChrome; // has the chrome finished loading? PRBool mChromeLoaded; // has someone called Destroy() on us? PRBool mIsDestroyed; // is the chrome listener attached yet? PRBool mListenersAttached; // do we have a newWindowListener? PRBool mNewWindowListenerAttached; jobject mJavaBrowserControl; NativeWrapperFactory * wrapperFactory; }; #endif // NativeBrowserControl_h