Bug 1322414 - part 1 - remove GetContentShellById and id passing, r?bz
MozReview-Commit-ID: FggtlNAP6ax
--- a/docshell/base/nsIDocShellTreeOwner.idl
+++ b/docshell/base/nsIDocShellTreeOwner.idl
@@ -18,21 +18,19 @@ interface nsIDocShellTreeOwner : nsISupp
{
/**
* Called when a content shell is added to the docshell tree. This is
* _only_ called for "root" content shells (that is, ones whose parent is a
* chrome shell).
*
* @param aContentShell the shell being added.
* @param aPrimary whether the shell is primary.
- * @param aID the "id" of the shell. What this actually means is
- * undefined. Don't rely on this for anything.
*/
void contentShellAdded(in nsIDocShellTreeItem aContentShell,
- in boolean aPrimary, in AString aID);
+ in boolean aPrimary);
/**
* Called when a content shell is removed from the docshell tree. This is
* _only_ called for "root" content shells (that is, ones whose parent is a
* chrome shell). Note that if aContentShell was never added,
* contentShellRemoved should just do nothing.
*
* @param aContentShell the shell being removed.
--- a/dom/base/nsFrameLoader.cpp
+++ b/dom/base/nsFrameLoader.cpp
@@ -956,17 +956,17 @@ nsFrameLoader::AddTreeItemToTreeOwner(ns
if (aParentType == nsIDocShellTreeItem::typeChrome && isContent) {
retval = true;
bool is_primary = value.LowerCaseEqualsLiteral("content-primary");
if (aOwner) {
mOwnerContent->AddMutationObserver(this);
mObservingOwnerContent = true;
- aOwner->ContentShellAdded(aItem, is_primary, value);
+ aOwner->ContentShellAdded(aItem, is_primary);
}
}
return retval;
}
static bool
AllDescendantsOfType(nsIDocShellTreeItem* aParentItem, int32_t aType)
@@ -3279,17 +3279,17 @@ nsFrameLoader::AttributeChanged(nsIDocum
}
#endif
parentTreeOwner->ContentShellRemoved(mDocShell);
if (value.LowerCaseEqualsLiteral("content") ||
StringBeginsWith(value, NS_LITERAL_STRING("content-"),
nsCaseInsensitiveStringComparator())) {
- parentTreeOwner->ContentShellAdded(mDocShell, is_primary, value);
+ parentTreeOwner->ContentShellAdded(mDocShell, is_primary);
}
}
/**
* Send the RequestNotifyAfterRemotePaint message to the current Tab.
*/
NS_IMETHODIMP
nsFrameLoader::RequestNotifyAfterRemotePaint()
--- a/embedding/browser/nsDocShellTreeOwner.cpp
+++ b/embedding/browser/nsDocShellTreeOwner.cpp
@@ -269,20 +269,20 @@ nsDocShellTreeOwner::EnsureContentTreeOw
if (mWebBrowser) {
mContentTreeOwner->WebBrowser(mWebBrowser);
}
}
NS_IMETHODIMP
nsDocShellTreeOwner::ContentShellAdded(nsIDocShellTreeItem* aContentShell,
- bool aPrimary, const nsAString& aID)
+ bool aPrimary)
{
if (mTreeOwner)
- return mTreeOwner->ContentShellAdded(aContentShell, aPrimary, aID);
+ return mTreeOwner->ContentShellAdded(aContentShell, aPrimary);
EnsureContentTreeOwner();
aContentShell->SetTreeOwner(mContentTreeOwner);
if (aPrimary) {
mPrimaryContentShell = aContentShell;
mPrimaryTabParent = nullptr;
}
--- a/xpfe/appshell/nsChromeTreeOwner.cpp
+++ b/xpfe/appshell/nsChromeTreeOwner.cpp
@@ -134,20 +134,20 @@ NS_IMETHODIMP nsChromeTreeOwner::GetInte
}
//*****************************************************************************
// nsChromeTreeOwner::nsIDocShellTreeOwner
//*****************************************************************************
NS_IMETHODIMP
nsChromeTreeOwner::ContentShellAdded(nsIDocShellTreeItem* aContentShell,
- bool aPrimary, const nsAString& aID)
+ bool aPrimary)
{
NS_ENSURE_STATE(mXULWindow);
- return mXULWindow->ContentShellAdded(aContentShell, aPrimary, aID);
+ return mXULWindow->ContentShellAdded(aContentShell, aPrimary);
}
NS_IMETHODIMP
nsChromeTreeOwner::ContentShellRemoved(nsIDocShellTreeItem* aContentShell)
{
NS_ENSURE_STATE(mXULWindow);
return mXULWindow->ContentShellRemoved(aContentShell);
}
--- a/xpfe/appshell/nsContentTreeOwner.cpp
+++ b/xpfe/appshell/nsContentTreeOwner.cpp
@@ -167,20 +167,20 @@ NS_IMETHODIMP nsContentTreeOwner::GetInt
}
//*****************************************************************************
// nsContentTreeOwner::nsIDocShellTreeOwner
//*****************************************************************************
NS_IMETHODIMP
nsContentTreeOwner::ContentShellAdded(nsIDocShellTreeItem* aContentShell,
- bool aPrimary, const nsAString& aID)
+ bool aPrimary)
{
NS_ENSURE_STATE(mXULWindow);
- return mXULWindow->ContentShellAdded(aContentShell, aPrimary, aID);
+ return mXULWindow->ContentShellAdded(aContentShell, aPrimary);
}
NS_IMETHODIMP
nsContentTreeOwner::ContentShellRemoved(nsIDocShellTreeItem* aContentShell)
{
NS_ENSURE_STATE(mXULWindow);
return mXULWindow->ContentShellRemoved(aContentShell);
}
--- a/xpfe/appshell/nsIXULWindow.idl
+++ b/xpfe/appshell/nsIXULWindow.idl
@@ -47,26 +47,16 @@ interface nsIXULWindow : nsISupports
* primaryTabParent.
*/
readonly attribute nsITabParent primaryTabParent;
void tabParentAdded(in nsITabParent aTab, in boolean aPrimary);
void tabParentRemoved(in nsITabParent aTab);
/**
- * The content shell specified by the supplied id.
- *
- * Note that this is a docshell tree item and therefore can not be assured of
- * what object it is. It could be an editor, a docshell, or a browser object.
- * Or down the road any other object that supports being a DocShellTreeItem
- * Query accordingly to determine the capabilities.
- */
- nsIDocShellTreeItem getContentShellById(in wstring ID);
-
- /**
* Tell this window that it has picked up a child XUL window
* @param aChild the child window being added
*/
void addChildWindow(in nsIXULWindow aChild);
/**
* Tell this window that it has lost a child XUL window
* @param aChild the child window being removed
--- a/xpfe/appshell/nsWebShellWindow.cpp
+++ b/xpfe/appshell/nsWebShellWindow.cpp
@@ -617,17 +617,16 @@ nsWebShellWindow::OnStateChange(nsIWebPr
if (cv) {
nsCOMPtr<nsIDOMDocument> menubarDOMDoc(do_QueryInterface(cv->GetDocument()));
if (menubarDOMDoc)
LoadNativeMenus(menubarDOMDoc, mWindow);
}
#endif // USE_NATIVE_MENUS
OnChromeLoaded();
- LoadContentAreas();
return NS_OK;
}
NS_IMETHODIMP
nsWebShellWindow::OnLocationChange(nsIWebProgress *aProgress,
nsIRequest *aRequest,
nsIURI *aURI,
@@ -652,91 +651,16 @@ nsWebShellWindow::OnSecurityChange(nsIWe
nsIRequest *aRequest,
uint32_t state)
{
NS_NOTREACHED("notification excluded in AddProgressListener(...)");
return NS_OK;
}
-//----------------------------------------
-
-// if the main document URL specified URLs for any content areas, start them loading
-void nsWebShellWindow::LoadContentAreas() {
-
- nsAutoString searchSpec;
-
- // fetch the chrome document URL
- nsCOMPtr<nsIContentViewer> contentViewer;
- // yes, it's possible for the docshell to be null even this early
- // see bug 57514.
- if (mDocShell)
- mDocShell->GetContentViewer(getter_AddRefs(contentViewer));
- if (contentViewer) {
- nsIDocument* doc = contentViewer->GetDocument();
- if (doc) {
- nsIURI* mainURL = doc->GetDocumentURI();
-
- nsCOMPtr<nsIURL> url = do_QueryInterface(mainURL);
- if (url) {
- nsAutoCString search;
- url->GetQuery(search);
-
- AppendUTF8toUTF16(search, searchSpec);
- }
- }
- }
-
- // content URLs are specified in the search part of the URL
- // as <contentareaID>=<escapedURL>[;(repeat)]
- if (!searchSpec.IsEmpty()) {
- int32_t begPos,
- eqPos,
- endPos;
- nsString contentAreaID,
- contentURL;
- char *urlChar;
- nsresult rv;
- for (endPos = 0; endPos < (int32_t)searchSpec.Length(); ) {
- // extract contentAreaID and URL substrings
- begPos = endPos;
- eqPos = searchSpec.FindChar('=', begPos);
- if (eqPos < 0)
- break;
-
- endPos = searchSpec.FindChar(';', eqPos);
- if (endPos < 0)
- endPos = searchSpec.Length();
- searchSpec.Mid(contentAreaID, begPos, eqPos-begPos);
- searchSpec.Mid(contentURL, eqPos+1, endPos-eqPos-1);
- endPos++;
-
- // see if we have a docshell with a matching contentAreaID
- nsCOMPtr<nsIDocShellTreeItem> content;
- rv = GetContentShellById(contentAreaID.get(), getter_AddRefs(content));
- if (NS_SUCCEEDED(rv) && content) {
- nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(content));
- if (webNav) {
- urlChar = ToNewCString(contentURL);
- if (urlChar) {
- nsUnescape(urlChar);
- contentURL.AssignWithConversion(urlChar);
- webNav->LoadURI(contentURL.get(),
- nsIWebNavigation::LOAD_FLAGS_NONE,
- nullptr,
- nullptr,
- nullptr);
- free(urlChar);
- }
- }
- }
- }
- }
-}
-
/**
* ExecuteCloseHandler - Run the close handler, if any.
* @return true iff we found a close handler to run.
*/
bool nsWebShellWindow::ExecuteCloseHandler()
{
/* If the event handler closes this window -- a likely scenario --
things get deleted out of order without this death grip.
--- a/xpfe/appshell/nsWebShellWindow.h
+++ b/xpfe/appshell/nsWebShellWindow.h
@@ -65,17 +65,16 @@ public:
virtual void WindowActivated() override;
virtual void WindowDeactivated() override;
protected:
friend class mozilla::WebShellWindowTimerCallback;
virtual ~nsWebShellWindow();
- void LoadContentAreas();
bool ExecuteCloseHandler();
void ConstrainToOpenerScreen(int32_t* aX, int32_t* aY);
nsCOMPtr<nsITimer> mSPTimer;
mozilla::Mutex mSPTimerLock;
void SetPersistenceTimer(uint32_t aDirtyFlags);
void FirePersistenceTimer();
--- a/xpfe/appshell/nsXULWindow.cpp
+++ b/xpfe/appshell/nsXULWindow.cpp
@@ -339,35 +339,16 @@ nsXULWindow::TabParentRemoved(nsITabPare
NS_IMETHODIMP
nsXULWindow::GetPrimaryTabParent(nsITabParent** aTab)
{
nsCOMPtr<nsITabParent> tab = mPrimaryTabParent;
tab.forget(aTab);
return NS_OK;
}
-NS_IMETHODIMP nsXULWindow::GetContentShellById(const char16_t* aID,
- nsIDocShellTreeItem** aDocShellTreeItem)
-{
- NS_ENSURE_ARG_POINTER(aDocShellTreeItem);
- *aDocShellTreeItem = nullptr;
-
- uint32_t count = mContentShells.Length();
- for (uint32_t i = 0; i < count; i++) {
- nsContentShellInfo* shellInfo = mContentShells.ElementAt(i);
- if (shellInfo->id.Equals(aID)) {
- *aDocShellTreeItem = nullptr;
- if (shellInfo->child)
- CallQueryReferent(shellInfo->child.get(), aDocShellTreeItem);
- return NS_OK;
- }
- }
- return NS_ERROR_FAILURE;
-}
-
NS_IMETHODIMP nsXULWindow::AddChildWindow(nsIXULWindow *aChild)
{
// we're not really keeping track of this right now
return NS_OK;
}
NS_IMETHODIMP nsXULWindow::RemoveChildWindow(nsIXULWindow *aChild)
{
@@ -505,23 +486,16 @@ NS_IMETHODIMP nsXULWindow::Destroy()
mDOMWindow = nullptr;
if (mDocShell) {
nsCOMPtr<nsIBaseWindow> shellAsWin(do_QueryInterface(mDocShell));
shellAsWin->Destroy();
mDocShell = nullptr; // this can cause reentrancy of this function
}
- // Remove our ref on the content shells
- uint32_t count = mContentShells.Length();
- for (uint32_t i = 0; i < count; i++) {
- nsContentShellInfo* shellInfo = mContentShells.ElementAt(i);
- delete shellInfo;
- }
- mContentShells.Clear();
mPrimaryContentShell = nullptr;
if (mContentTreeOwner) {
mContentTreeOwner->XULWindow(nullptr);
NS_RELEASE(mContentTreeOwner);
}
if (mPrimaryContentTreeOwner) {
mPrimaryContentTreeOwner->XULWindow(nullptr);
@@ -1680,38 +1654,18 @@ nsXULWindow::GetWindowDOMElement() const
const nsIDocument* document = cv->GetDocument();
NS_ENSURE_TRUE(document, nullptr);
return document->GetRootElement();
}
nsresult nsXULWindow::ContentShellAdded(nsIDocShellTreeItem* aContentShell,
- bool aPrimary, const nsAString& aID)
+ bool aPrimary)
{
- nsContentShellInfo* shellInfo = nullptr;
-
- uint32_t i, count = mContentShells.Length();
- nsWeakPtr contentShellWeak = do_GetWeakReference(aContentShell);
- for (i = 0; i < count; i++) {
- nsContentShellInfo* info = mContentShells.ElementAt(i);
- if (info->id.Equals(aID)) {
- // We already exist. Do a replace.
- info->child = contentShellWeak;
- shellInfo = info;
- }
- else if (info->child == contentShellWeak)
- info->child = nullptr;
- }
-
- if (!shellInfo) {
- shellInfo = new nsContentShellInfo(aID, contentShellWeak);
- mContentShells.AppendElement(shellInfo);
- }
-
// Set the default content tree owner
if (aPrimary) {
NS_ENSURE_SUCCESS(EnsurePrimaryContentTreeOwner(), NS_ERROR_FAILURE);
aContentShell->SetTreeOwner(mPrimaryContentTreeOwner);
mPrimaryContentShell = aContentShell;
mPrimaryTabParent = nullptr;
}
else {
@@ -1724,27 +1678,16 @@ nsresult nsXULWindow::ContentShellAdded(
return NS_OK;
}
nsresult nsXULWindow::ContentShellRemoved(nsIDocShellTreeItem* aContentShell)
{
if (mPrimaryContentShell == aContentShell) {
mPrimaryContentShell = nullptr;
}
-
- int32_t i, count = mContentShells.Length();
- for (i = count - 1; i >= 0; --i) {
- nsContentShellInfo* info = mContentShells.ElementAt(i);
- nsCOMPtr<nsIDocShellTreeItem> curItem = do_QueryReferent(info->child);
- if (!curItem || SameCOMIdentity(curItem, aContentShell)) {
- mContentShells.RemoveElementAt(i);
- delete info;
- }
- }
-
return NS_OK;
}
NS_IMETHODIMP
nsXULWindow::GetPrimaryContentSize(int32_t* aWidth,
int32_t* aHeight)
{
if (mPrimaryTabParent) {
@@ -2266,25 +2209,8 @@ nsXULWindow::GetTabCount(uint32_t* aResu
if (mXULBrowserWindow) {
return mXULBrowserWindow->GetTabCount(aResult);
}
*aResult = 0;
return NS_OK;
}
-//*****************************************************************************
-//*** nsContentShellInfo: Object Management
-//*****************************************************************************
-
-nsContentShellInfo::nsContentShellInfo(const nsAString& aID,
- nsIWeakReference* aContentShell)
- : id(aID),
- child(aContentShell)
-{
- MOZ_COUNT_CTOR(nsContentShellInfo);
-}
-
-nsContentShellInfo::~nsContentShellInfo()
-{
- MOZ_COUNT_DTOR(nsContentShellInfo);
- //XXX Set Tree Owner to null if the tree owner is nsXULWindow->mContentTreeOwner
-}
--- a/xpfe/appshell/nsXULWindow.h
+++ b/xpfe/appshell/nsXULWindow.h
@@ -101,18 +101,17 @@ protected:
void SyncAttributesToWidget();
NS_IMETHOD SavePersistentAttributes();
NS_IMETHOD GetWindowDOMWindow(mozIDOMWindowProxy** aDOMWindow);
mozilla::dom::Element* GetWindowDOMElement() const;
// See nsIDocShellTreeOwner for docs on next two methods
nsresult ContentShellAdded(nsIDocShellTreeItem* aContentShell,
- bool aPrimary,
- const nsAString& aID);
+ bool aPrimary);
nsresult ContentShellRemoved(nsIDocShellTreeItem* aContentShell);
NS_IMETHOD GetPrimaryContentSize(int32_t* aWidth,
int32_t* aHeight);
NS_IMETHOD SetPrimaryContentSize(int32_t aWidth,
int32_t aHeight);
nsresult GetRootShellSize(int32_t* aWidth,
int32_t* aHeight);
nsresult SetRootShellSize(int32_t aWidth,
@@ -141,17 +140,16 @@ protected:
nsCOMPtr<nsIWidget> mWindow;
nsCOMPtr<nsIDocShell> mDocShell;
nsCOMPtr<nsPIDOMWindowOuter> mDOMWindow;
nsCOMPtr<nsIWeakReference> mParentWindow;
nsCOMPtr<nsIPrompt> mPrompter;
nsCOMPtr<nsIAuthPrompt> mAuthPrompter;
nsCOMPtr<nsIXULBrowserWindow> mXULBrowserWindow;
nsCOMPtr<nsIDocShellTreeItem> mPrimaryContentShell;
- nsTArray<nsContentShellInfo*> mContentShells; // array of doc shells by id
nsresult mModalStatus;
bool mContinueModalLoop;
bool mDebuting; // being made visible right now
bool mChromeLoaded; // True when chrome has loaded
bool mShowAfterLoad;
bool mIntrinsicallySized;
bool mCenterAfterLoad;
bool mIsHiddenWindow;
@@ -173,25 +171,9 @@ protected:
nsCOMPtr<nsITabParent> mPrimaryTabParent;
private:
nsresult GetPrimaryTabParentSize(int32_t* aWidth, int32_t* aHeight);
nsresult GetPrimaryContentShellSize(int32_t* aWidth, int32_t* aHeight);
nsresult SetPrimaryTabParentSize(int32_t aWidth, int32_t aHeight);
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsXULWindow, NS_XULWINDOW_IMPL_CID)
-
-// nsContentShellInfo
-// Used to map shell IDs to nsIDocShellTreeItems.
-
-class nsContentShellInfo
-{
-public:
- nsContentShellInfo(const nsAString& aID,
- nsIWeakReference* aContentShell);
- ~nsContentShellInfo();
-
-public:
- nsString id; // The identifier of the content shell
- nsWeakPtr child; // content shell (weak reference to nsIDocShellTreeItem)
-};
-
#endif /* nsXULWindow_h__ */