Remove unneeded nsIFrameLoader interface (bug 280992). r+sr=jst.

This commit is contained in:
bryner%brianryner.com 2005-02-07 23:53:47 +00:00
parent 15280169c5
commit 064c7eb606
12 changed files with 129 additions and 251 deletions

View File

@ -69,7 +69,6 @@ nsIContentSerializer.h \
nsIHTMLToTextSink.h \
nsIXPathEvaluatorInternal.h \
mozISanitizingSerializer.h \
nsIFrameLoader.h \
nsContentCID.h \
nsCopySupport.h \
nsContentCreatorFunctions.h \

View File

@ -517,7 +517,9 @@ public:
/** svg elements */
eSVG = 0x00000040,
/** comment nodes */
eCOMMENT = 0x00000080
eCOMMENT = 0x00000080,
/** frame elements (frame, iframe) */
eFRAME_ELEMENT = 0x00000100
};
/**

View File

@ -1,118 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* 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 Mozilla Communicator client code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Johnny Stenback <jst@netscape.com> (original author)
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef nsIFrameLoader_h___
#define nsIFrameLoader_h___
#include "nsISupports.h"
#include "nsAString.h"
// Forward declarations
class nsIContent;
class nsIDocShell;
class nsIURI;
// IID for the nsIFrameLoader interface
#define NS_IFRAMELOADER_IID \
{ 0x51e2b6df, 0xdaf2, 0x4a2f, \
{0x80, 0xe5, 0xed, 0x69, 0x5b, 0x8c, 0x67, 0x4f} }
// IID for the nsIFrameLoaderOwner interface
#define NS_IFRAMELOADEROWNER_IID \
{ 0x0080d493, 0x96b4, 0x4606, \
{0xa7, 0x43, 0x0f, 0x47, 0xee, 0x87, 0x14, 0xd1} }
// CID for the nsIFrameLoader implementation
#define NS_FRAMELOADER_CID \
{ 0x712603da, 0xf245, 0x4503, \
{0xa5, 0x41, 0xb0, 0x49, 0xcb, 0x06, 0x81, 0xae} }
#define NS_FRAMELOADER_CONTRACTID "@mozilla.org/content/frameloader"
class nsIFrameLoader : public nsISupports
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IFRAMELOADER_IID)
/**
* Initialize the frame loader, hand it the owner content. Note that
* the owner content reference is a weak reference, if the owner
* content is destroyed before the frame loader goes away the owner
* content must call the Destroy() method to clear the owner content
* reference.
*/
NS_IMETHOD Init(nsIContent *aOwner) = 0;
/**
* Start loading the frame. This method figures out what to load
* from the owner content in the frame loader.
*/
NS_IMETHOD LoadFrame() = 0;
/**
* Get the docshell from the frame loader.
*/
NS_IMETHOD GetDocShell(nsIDocShell **aDocShell) = 0;
/**
* Destroy the frame loader and everything inside it. This will
* clear the weak owner content reference. */
NS_IMETHOD Destroy() = 0;
};
class nsIFrameLoaderOwner : public nsISupports
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IFRAMELOADEROWNER_IID)
/**
* Get the frame loader from the frame loader owner.
*/
NS_IMETHOD GetFrameLoader(nsIFrameLoader **aFrameLoader) = 0;
/**
* Sets (or clears) the frame loader for this content.
*/
NS_IMETHOD SetFrameLoader(nsIFrameLoader *aFrameLoader) = 0;
};
nsresult
NS_NewFrameLoader(nsIFrameLoader **aFrameLoader);
#endif /* nsIFrameLoader_h___ */

View File

@ -36,7 +36,6 @@
*
* ***** END LICENSE BLOCK ***** */
#include "nsIFrameLoader.h"
#include "nsIDOMHTMLIFrameElement.h"
#include "nsIDOMHTMLFrameElement.h"
#include "nsIDOMWindow.h"
@ -59,6 +58,7 @@
#include "nsUnicharUtils.h"
#include "nsIScriptGlobalObject.h"
#include "nsIScriptSecurityManager.h"
#include "nsFrameLoader.h"
#include "nsIURI.h"
#include "nsIURL.h"
@ -83,72 +83,12 @@
// we'd need to re-institute a fixed version of bug 98158.
#define MAX_DEPTH_CONTENT_FRAMES 10
class nsFrameLoader : public nsIFrameLoader
{
public:
nsFrameLoader();
virtual ~nsFrameLoader();
// nsISupports
NS_DECL_ISUPPORTS
// nsIFrameLoader
NS_IMETHOD Init(nsIContent *aOwner);
NS_IMETHOD LoadFrame();
NS_IMETHOD GetDocShell(nsIDocShell **aDocShell);
NS_IMETHOD Destroy();
protected:
nsresult EnsureDocShell();
void GetURL(nsAString& aURL);
nsCOMPtr<nsIDocShell> mDocShell;
nsIContent *mOwnerContent; // WEAK
};
nsresult
NS_NewFrameLoader(nsIFrameLoader **aFrameLoader)
{
*aFrameLoader = new nsFrameLoader();
NS_ENSURE_TRUE(*aFrameLoader, NS_ERROR_OUT_OF_MEMORY);
NS_ADDREF(*aFrameLoader);
return NS_OK;
}
nsFrameLoader::nsFrameLoader()
: mOwnerContent(nsnull)
{
}
nsFrameLoader::~nsFrameLoader()
{
Destroy();
}
// QueryInterface implementation for nsFrameLoader
NS_INTERFACE_MAP_BEGIN(nsFrameLoader)
NS_INTERFACE_MAP_ENTRY(nsIFrameLoader)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsFrameLoader)
NS_IMPL_RELEASE(nsFrameLoader)
NS_IMETHODIMP
nsFrameLoader::Init(nsIContent *aOwner)
{
mOwnerContent = aOwner; // WEAK
return NS_OK;
}
NS_IMETHODIMP
nsresult
nsFrameLoader::LoadFrame()
{
NS_ENSURE_TRUE(mOwnerContent, NS_ERROR_NOT_INITIALIZED);
@ -323,7 +263,7 @@ nsFrameLoader::LoadFrame()
return rv;
}
NS_IMETHODIMP
nsresult
nsFrameLoader::GetDocShell(nsIDocShell **aDocShell)
{
*aDocShell = nsnull;
@ -342,7 +282,7 @@ nsFrameLoader::GetDocShell(nsIDocShell **aDocShell)
return NS_OK;
}
NS_IMETHODIMP
void
nsFrameLoader::Destroy()
{
if (mOwnerContent) {
@ -368,8 +308,6 @@ nsFrameLoader::Destroy()
}
mDocShell = nsnull;
return NS_OK;
}
nsresult
@ -565,7 +503,7 @@ nsFrameLoader::EnsureDocShell()
}
void
nsFrameLoader::GetURL(nsAString& aURI)
nsFrameLoader::GetURL(nsString& aURI)
{
aURI.Truncate();

View File

@ -0,0 +1,81 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* 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 Mozilla Communicator client code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Johnny Stenback <jst@netscape.com> (original author)
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef nsFrameLoader_h_
#define nsFrameLoader_h_
#include "nsIDocShell.h"
#include "nsStringFwd.h"
class nsIContent;
class nsFrameLoader
{
public:
nsFrameLoader(nsIContent *aOwner) : mOwnerContent(aOwner) {}
~nsFrameLoader() NS_HIDDEN;
void AddRef()
{
++mRefCnt;
NS_LOG_ADDREF(this, mRefCnt, "nsFrameLoader", sizeof(nsFrameLoader));
}
void Release()
{
--mRefCnt;
NS_LOG_RELEASE(this, mRefCnt, "nsFrameLoader");
if (mRefCnt == 0)
delete this;
}
NS_HIDDEN_(nsresult) LoadFrame();
NS_HIDDEN_(nsresult) GetDocShell(nsIDocShell **aDocShell);
NS_HIDDEN_(void) Destroy();
protected:
NS_HIDDEN_(nsresult) EnsureDocShell();
NS_HIDDEN_(void) GetURL(nsString& aURL);
nsCOMPtr<nsIDocShell> mDocShell;
nsIContent *mOwnerContent; // WEAK
nsAutoRefCnt mRefCnt;
};
#endif

View File

@ -3363,17 +3363,9 @@ nsGenericHTMLFormElement::FindAndSetForm()
//----------------------------------------------------------------------
nsGenericHTMLFrameElement::~nsGenericHTMLFrameElement()
{
if (mFrameLoader) {
mFrameLoader->Destroy();
}
}
NS_INTERFACE_MAP_BEGIN(nsGenericHTMLFrameElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMNSHTMLFrameElement)
NS_INTERFACE_MAP_ENTRY(nsIChromeEventHandler)
NS_INTERFACE_MAP_ENTRY(nsIFrameLoaderOwner)
NS_INTERFACE_MAP_END_INHERITING(nsGenericHTMLElement)
nsresult
@ -3422,25 +3414,9 @@ nsGenericHTMLFrameElement::EnsureFrameLoader()
return NS_OK;
}
nsresult rv = NS_NewFrameLoader(getter_AddRefs(mFrameLoader));
NS_ENSURE_SUCCESS(rv, rv);
rv = mFrameLoader->Init(this);
return rv;
}
NS_IMETHODIMP
nsGenericHTMLFrameElement::GetFrameLoader(nsIFrameLoader **aFrameLoader)
{
NS_IF_ADDREF(*aFrameLoader = mFrameLoader);
return NS_OK;
}
NS_IMETHODIMP
nsGenericHTMLFrameElement::SetFrameLoader(nsIFrameLoader *aFrameLoader)
{
mFrameLoader = aFrameLoader;
mFrameLoader = new nsFrameLoader(this);
if (!mFrameLoader)
return NS_ERROR_OUT_OF_MEMORY;
return NS_OK;
}
@ -3484,13 +3460,11 @@ nsGenericHTMLFrameElement::SetDocument(nsIDocument *aDocument, PRBool aDeep,
nsGenericHTMLElement::SetDocument(aDocument, aDeep,
aCompileEventHandlers);
if (!aDocument && mFrameLoader) {
if (!aDocument) {
// This iframe is being taken out of the document, destroy the
// iframe's frame loader (doing that will tear down the window in
// this iframe).
mFrameLoader->Destroy();
mFrameLoader = nsnull;
}
@ -3528,6 +3502,12 @@ nsGenericHTMLFrameElement::HandleChromeEvent(nsPresContext* aPresContext,
return HandleDOMEvent(aPresContext, aEvent, aDOMEvent, aFlags,aEventStatus);
}
PRBool
nsGenericHTMLFrameElement::IsContentOfType(PRUint32 aFlags) const
{
return !(aFlags & ~(eELEMENT | eHTML | eFRAME_ELEMENT));
}
//----------------------------------------------------------------------
void

View File

@ -44,7 +44,7 @@
#include "nsIFormControl.h"
#include "nsIDOMNSHTMLFrameElement.h"
#include "nsIChromeEventHandler.h"
#include "nsIFrameLoader.h"
#include "nsFrameLoader.h"
class nsIDOMAttr;
class nsIDOMEventListener;
@ -862,16 +862,27 @@ protected:
class nsGenericHTMLFrameElement : public nsGenericHTMLElement,
public nsIDOMNSHTMLFrameElement,
public nsIChromeEventHandler,
public nsIFrameLoaderOwner
public nsIChromeEventHandler
{
public:
nsGenericHTMLFrameElement(nsINodeInfo *aNodeInfo)
: nsGenericHTMLElement(aNodeInfo)
{
}
virtual ~nsGenericHTMLFrameElement();
static nsGenericHTMLFrameElement* FromContent(nsIContent *aContent)
{
if (aContent->IsContentOfType(eFRAME_ELEMENT))
return NS_STATIC_CAST(nsGenericHTMLFrameElement*, aContent);
return nsnull;
}
nsFrameLoader* GetFrameLoader()
{
return mFrameLoader;
}
// nsISupports
NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr);
// nsIDOMNSHTMLFrameElement
@ -880,10 +891,6 @@ public:
// nsIChromeEventHandler
NS_DECL_NSICHROMEEVENTHANDLER
// nsIFrameLoaderOwner
NS_IMETHOD GetFrameLoader(nsIFrameLoader **aFrameLoader);
NS_IMETHOD SetFrameLoader(nsIFrameLoader *aFrameLoader);
// nsIContent
virtual PRBool IsFocusable(PRInt32 *aTabIndex = nsnull);
virtual void SetParent(nsIContent *aParent);
@ -897,6 +904,7 @@ public:
virtual nsresult SetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
nsIAtom* aPrefix, const nsAString& aValue,
PRBool aNotify);
virtual PRBool IsContentOfType(PRUint32 aFlags) const;
// nsIDOMNSHTMLElement
NS_IMETHOD GetTabIndex(PRInt32 *aTabIndex);
@ -909,7 +917,7 @@ protected:
nsresult LoadSrc();
nsresult GetContentDocument(nsIDOMDocument** aContentDocument);
nsCOMPtr<nsIFrameLoader> mFrameLoader;
nsRefPtr<nsFrameLoader> mFrameLoader;
};
//----------------------------------------------------------------------

View File

@ -65,6 +65,7 @@ REQUIRES = xpcom \
xultmpl \
webshell \
view \
docshell \
$(NULL)
EXPORTS = \

View File

@ -97,7 +97,6 @@
#include "nsIScriptNameSpaceManager.h"
#include "nsISelection.h"
#include "nsIXBLService.h"
#include "nsIFrameLoader.h"
#include "nsICaret.h"
#include "nsJSEnvironment.h"
#include "nsLayoutAtoms.h"
@ -475,7 +474,6 @@ nsresult NS_NewTextEncoder(nsIDocumentEncoder** aResult);
nsresult NS_NewXBLService(nsIXBLService** aResult);
nsresult NS_NewBindingManager(nsIBindingManager** aResult);
nsresult NS_NewContentPolicy(nsIContentPolicy** aResult);
nsresult NS_NewFrameLoader(nsIFrameLoader** aResult);
nsresult NS_NewSyncLoadDOMService(nsISyncLoadDOMService** aResult);
nsresult NS_NewDOMEventGroup(nsIDOMEventGroup** aResult);
@ -584,7 +582,6 @@ MAKE_CTOR(CreateSanitizingHTMLSerializer, nsIContentSerializer, NS_NewSan
MAKE_CTOR(CreateXBLService, nsIXBLService, NS_NewXBLService)
MAKE_CTOR(CreateBindingManager, nsIBindingManager, NS_NewBindingManager)
MAKE_CTOR(CreateContentPolicy, nsIContentPolicy, NS_NewContentPolicy)
MAKE_CTOR(CreateFrameLoader, nsIFrameLoader, NS_NewFrameLoader)
MAKE_CTOR(CreateComputedDOMStyle, nsIComputedDOMStyle, NS_NewComputedDOMStyle)
#ifdef MOZ_XUL
MAKE_CTOR(CreateXULSortService, nsIXULSortService, NS_NewXULSortService)
@ -1161,11 +1158,6 @@ static const nsModuleComponentInfo gComponents[] = {
NS_CONTENTPOLICY_CONTRACTID,
CreateContentPolicy },
{ "Frame Loader",
NS_FRAMELOADER_CID,
NS_FRAMELOADER_CONTRACTID,
CreateFrameLoader },
{ "DOM CSS Computed Style Declaration",
NS_COMPUTEDDOMSTYLE_CID,
"@mozilla.org/DOM/Level2/CSS/computedStyleDeclaration;1",

View File

@ -68,6 +68,7 @@ REQUIRES = xpcom \
xpconnect \
js \
pref \
docshell \
$(NULL)
EXPORTS = \

View File

@ -69,7 +69,7 @@
#include "nsIDOMHTMLFrameElement.h"
#include "nsIDOMHTMLIFrameElement.h"
#include "nsIDOMXULElement.h"
#include "nsIFrameLoader.h"
#include "nsFrameLoader.h"
#include "nsLayoutAtoms.h"
#include "nsIScriptSecurityManager.h"
#include "nsXPIDLString.h"
@ -157,7 +157,7 @@ protected:
nsHTMLReflowMetrics& aDesiredSize);
virtual PRIntn GetSkipSides() const;
nsCOMPtr<nsIFrameLoader> mFrameLoader;
nsRefPtr<nsFrameLoader> mFrameLoader;
PRPackedBool mOwnsFrameLoader;
PRPackedBool mIsInline;
nsIView* mInnerView;
@ -597,28 +597,21 @@ nsSubDocumentFrame::GetDocShell(nsIDocShell **aDocShell)
}
if (!mFrameLoader) {
nsCOMPtr<nsIFrameLoaderOwner> frame_loader_owner =
do_QueryInterface(content);
nsGenericHTMLFrameElement *frameElement =
nsGenericHTMLFrameElement::FromContent(content);
if (frame_loader_owner) {
frame_loader_owner->GetFrameLoader(getter_AddRefs(mFrameLoader));
if (frameElement) {
mFrameLoader = frameElement->GetFrameLoader();
}
if (!mFrameLoader) {
nsresult rv = NS_OK;
// No frame loader available from the content, create our own...
mFrameLoader = do_CreateInstance(NS_FRAMELOADER_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
// ... remember that we own this frame loader...
mOwnsFrameLoader = PR_TRUE;
// ... initialize it...
mFrameLoader->Init(content);
mFrameLoader = new nsFrameLoader(content);
if (!mFrameLoader)
return NS_ERROR_OUT_OF_MEMORY;
// ... and tell it to start loading.
rv = mFrameLoader->LoadFrame();
nsresult rv = mFrameLoader->LoadFrame();
NS_ENSURE_SUCCESS(rv, rv);
}
}

View File

@ -60,6 +60,7 @@ REQUIRES = xpcom \
js \
xpconnect \
pref \
docshell \
$(NULL)
EXPORTS = \