forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			183 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | 
						|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
 | 
						|
/* This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
						|
 | 
						|
#ifndef nsWebBrowser_h__
 | 
						|
#define nsWebBrowser_h__
 | 
						|
 | 
						|
// Local Includes
 | 
						|
#include "nsDocShellTreeOwner.h"
 | 
						|
 | 
						|
// Core Includes
 | 
						|
#include "nsAutoPtr.h"
 | 
						|
#include "nsCOMPtr.h"
 | 
						|
#include "nsCycleCollectionParticipant.h"
 | 
						|
 | 
						|
// Interfaces needed
 | 
						|
#include "nsCWebBrowser.h"
 | 
						|
#include "nsIBaseWindow.h"
 | 
						|
#include "nsIDocShell.h"
 | 
						|
#include "nsIDocShellTreeItem.h"
 | 
						|
#include "nsIInterfaceRequestor.h"
 | 
						|
#include "nsIInterfaceRequestorUtils.h"
 | 
						|
#include "nsIScrollable.h"
 | 
						|
#include "nsISHistory.h"
 | 
						|
#include "nsITextScroll.h"
 | 
						|
#include "nsIWidget.h"
 | 
						|
#include "nsIWebProgress.h"
 | 
						|
#include "nsISecureBrowserUI.h"
 | 
						|
#include "nsIWebBrowser.h"
 | 
						|
#include "nsIWebNavigation.h"
 | 
						|
#include "nsIWebBrowserSetup.h"
 | 
						|
#include "nsIWebBrowserPersist.h"
 | 
						|
#include "nsIWebBrowserFocus.h"
 | 
						|
#include "nsIWindowWatcher.h"
 | 
						|
#include "nsIPrintSettings.h"
 | 
						|
#include "nsIWidgetListener.h"
 | 
						|
 | 
						|
#include "mozilla/BasePrincipal.h"
 | 
						|
#include "nsTArray.h"
 | 
						|
#include "nsWeakPtr.h"
 | 
						|
 | 
						|
class nsWebBrowserInitInfo
 | 
						|
{
 | 
						|
public:
 | 
						|
  // nsIBaseWindow Stuff
 | 
						|
  int32_t x;
 | 
						|
  int32_t y;
 | 
						|
  int32_t cx;
 | 
						|
  int32_t cy;
 | 
						|
  bool visible;
 | 
						|
  nsString name;
 | 
						|
};
 | 
						|
 | 
						|
class nsWebBrowserListenerState
 | 
						|
{
 | 
						|
public:
 | 
						|
  bool Equals(nsIWeakReference* aListener, const nsIID& aID)
 | 
						|
  {
 | 
						|
    return mWeakPtr.get() == aListener && mID.Equals(aID);
 | 
						|
  }
 | 
						|
 | 
						|
  nsWeakPtr mWeakPtr;
 | 
						|
  nsIID mID;
 | 
						|
};
 | 
						|
 | 
						|
//  {cda5863a-aa9c-411e-be49-ea0d525ab4b5} -
 | 
						|
#define NS_WEBBROWSER_CID \
 | 
						|
  { 0xcda5863a, 0xaa9c, 0x411e, { 0xbe, 0x49, 0xea, 0x0d, 0x52, 0x5a, 0xb4, 0xb5 } }
 | 
						|
 | 
						|
 | 
						|
class nsWebBrowser final : public nsIWebBrowser,
 | 
						|
                           public nsIWebNavigation,
 | 
						|
                           public nsIWebBrowserSetup,
 | 
						|
                           public nsIDocShellTreeItem,
 | 
						|
                           public nsIBaseWindow,
 | 
						|
                           public nsIScrollable,
 | 
						|
                           public nsITextScroll,
 | 
						|
                           public nsIInterfaceRequestor,
 | 
						|
                           public nsIWebBrowserPersist,
 | 
						|
                           public nsIWebBrowserFocus,
 | 
						|
                           public nsIWebProgressListener,
 | 
						|
                           public nsSupportsWeakReference
 | 
						|
{
 | 
						|
  friend class nsDocShellTreeOwner;
 | 
						|
 | 
						|
public:
 | 
						|
 | 
						|
  // The implementation of non-refcounted nsIWidgetListener, which would hold a
 | 
						|
  // strong reference on stack before calling nsWebBrowser's
 | 
						|
  // MOZ_CAN_RUN_SCRIPT methods.
 | 
						|
  class WidgetListenerDelegate : public nsIWidgetListener
 | 
						|
  {
 | 
						|
  public:
 | 
						|
    explicit WidgetListenerDelegate(nsWebBrowser* aWebBrowser)
 | 
						|
      : mWebBrowser(aWebBrowser) {}
 | 
						|
    MOZ_CAN_RUN_SCRIPT_BOUNDARY virtual void WindowActivated() override;
 | 
						|
    MOZ_CAN_RUN_SCRIPT_BOUNDARY virtual void WindowDeactivated() override;
 | 
						|
    MOZ_CAN_RUN_SCRIPT_BOUNDARY virtual bool PaintWindow(
 | 
						|
      nsIWidget* aWidget, mozilla::LayoutDeviceIntRegion aRegion) override;
 | 
						|
 | 
						|
  private:
 | 
						|
    // The lifetime of WidgetListenerDelegate is bound to nsWebBrowser so we
 | 
						|
    // just use raw pointer here.
 | 
						|
    nsWebBrowser* mWebBrowser;
 | 
						|
  };
 | 
						|
 | 
						|
  nsWebBrowser();
 | 
						|
 | 
						|
  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
 | 
						|
  NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsWebBrowser, nsIWebBrowser)
 | 
						|
 | 
						|
  NS_DECL_NSIBASEWINDOW
 | 
						|
  NS_DECL_NSIDOCSHELLTREEITEM
 | 
						|
  NS_DECL_NSIINTERFACEREQUESTOR
 | 
						|
  NS_DECL_NSISCROLLABLE
 | 
						|
  NS_DECL_NSITEXTSCROLL
 | 
						|
  NS_DECL_NSIWEBBROWSER
 | 
						|
  NS_DECL_NSIWEBNAVIGATION
 | 
						|
  NS_DECL_NSIWEBBROWSERSETUP
 | 
						|
  NS_DECL_NSIWEBBROWSERPERSIST
 | 
						|
  NS_DECL_NSICANCELABLE
 | 
						|
  NS_DECL_NSIWEBBROWSERFOCUS
 | 
						|
  NS_DECL_NSIWEBPROGRESSLISTENER
 | 
						|
 | 
						|
protected:
 | 
						|
  virtual ~nsWebBrowser();
 | 
						|
  NS_IMETHOD InternalDestroy();
 | 
						|
 | 
						|
  // XXXbz why are these NS_IMETHOD?  They're not interface methods!
 | 
						|
  NS_IMETHOD SetDocShell(nsIDocShell* aDocShell);
 | 
						|
  NS_IMETHOD EnsureDocShellTreeOwner();
 | 
						|
  NS_IMETHOD BindListener(nsISupports* aListener, const nsIID& aIID);
 | 
						|
  NS_IMETHOD UnBindListener(nsISupports* aListener, const nsIID& aIID);
 | 
						|
  NS_IMETHOD EnableGlobalHistory(bool aEnable);
 | 
						|
 | 
						|
  // nsIWidgetListener methods for WidgetListenerDelegate.
 | 
						|
  MOZ_CAN_RUN_SCRIPT void WindowActivated();
 | 
						|
  MOZ_CAN_RUN_SCRIPT void WindowDeactivated();
 | 
						|
  MOZ_CAN_RUN_SCRIPT bool PaintWindow(
 | 
						|
    nsIWidget* aWidget, mozilla::LayoutDeviceIntRegion aRegion);
 | 
						|
 | 
						|
protected:
 | 
						|
  RefPtr<nsDocShellTreeOwner> mDocShellTreeOwner;
 | 
						|
  nsCOMPtr<nsIDocShell> mDocShell;
 | 
						|
  nsCOMPtr<nsIInterfaceRequestor> mDocShellAsReq;
 | 
						|
  nsCOMPtr<nsIBaseWindow> mDocShellAsWin;
 | 
						|
  nsCOMPtr<nsIWebNavigation> mDocShellAsNav;
 | 
						|
  nsCOMPtr<nsIScrollable> mDocShellAsScrollable;
 | 
						|
  nsCOMPtr<nsITextScroll> mDocShellAsTextScroll;
 | 
						|
  mozilla::OriginAttributes mOriginAttributes;
 | 
						|
 | 
						|
  nsCOMPtr<nsIWidget> mInternalWidget;
 | 
						|
  nsCOMPtr<nsIWindowWatcher> mWWatch;
 | 
						|
  nsAutoPtr<nsWebBrowserInitInfo> mInitInfo;
 | 
						|
  uint32_t mContentType;
 | 
						|
  bool mActivating;
 | 
						|
  bool mShouldEnableHistory;
 | 
						|
  bool mIsActive;
 | 
						|
  nativeWindow mParentNativeWindow;
 | 
						|
  nsIWebProgressListener* mProgressListener;
 | 
						|
  nsCOMPtr<nsIWebProgress> mWebProgress;
 | 
						|
 | 
						|
  nsCOMPtr<nsIPrintSettings> mPrintSettings;
 | 
						|
 | 
						|
  WidgetListenerDelegate mWidgetListenerDelegate;
 | 
						|
 | 
						|
  // cached background color
 | 
						|
  nscolor mBackgroundColor;
 | 
						|
 | 
						|
  // persistence object
 | 
						|
  nsCOMPtr<nsIWebBrowserPersist> mPersist;
 | 
						|
  uint32_t mPersistCurrentState;
 | 
						|
  nsresult mPersistResult;
 | 
						|
  uint32_t mPersistFlags;
 | 
						|
 | 
						|
  // Weak Reference interfaces...
 | 
						|
  nsIWidget* mParentWidget;
 | 
						|
  nsAutoPtr<nsTArray<nsWebBrowserListenerState> > mListenerArray;
 | 
						|
};
 | 
						|
 | 
						|
#endif /* nsWebBrowser_h__ */
 |