mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-18 07:45:30 +00:00
Bug 1602501: Update TabListener owner content when swapping frame loaders. r=peterv
Differential Revision: https://phabricator.services.mozilla.com/D103722
This commit is contained in:
parent
a28d2450d7
commit
4c823d6e30
@ -140,7 +140,6 @@ skip-if = fission # Bug 1572084
|
||||
[browser_sizemodeBeforeMinimized.js]
|
||||
[browser_tab_label_during_restore.js]
|
||||
[browser_swapDocShells.js]
|
||||
fail-if = sessionHistoryInParent # Bug 1602501
|
||||
[browser_switch_remoteness.js]
|
||||
run-if = e10s
|
||||
[browser_upgrade_backup.js]
|
||||
|
@ -2059,6 +2059,12 @@ void nsFrameLoader::SetOwnerContent(Element* aContent) {
|
||||
}
|
||||
mOwnerContent = aContent;
|
||||
|
||||
if (mSessionStoreListener && mOwnerContent) {
|
||||
// mOwnerContent will only be null when the frame loader is being destroyed,
|
||||
// so the session store listener will be destroyed along with it.
|
||||
mSessionStoreListener->SetOwnerContent(mOwnerContent);
|
||||
}
|
||||
|
||||
if (RefPtr<BrowsingContext> browsingContext = GetExtantBrowsingContext()) {
|
||||
browsingContext->SetEmbedderElement(mOwnerContent);
|
||||
}
|
||||
|
@ -221,24 +221,52 @@ nsresult TabListener::Init() {
|
||||
mStorageObserverRegistered = true;
|
||||
}
|
||||
|
||||
nsCOMPtr<EventTarget> eventTarget = GetEventTarget();
|
||||
if (!eventTarget) {
|
||||
return NS_OK;
|
||||
}
|
||||
eventTarget->AddSystemEventListener(u"mozvisualscroll"_ns, this, false);
|
||||
eventTarget->AddSystemEventListener(u"input"_ns, this, false);
|
||||
|
||||
if (mozilla::SessionHistoryInParent()) {
|
||||
eventTarget->AddSystemEventListener(u"DOMTitleChanged"_ns, this, false);
|
||||
}
|
||||
|
||||
mEventListenerRegistered = true;
|
||||
eventTarget->AddSystemEventListener(u"MozSessionStorageChanged"_ns, this,
|
||||
false);
|
||||
mStorageChangeListenerRegistered = true;
|
||||
AddEventListeners();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void TabListener::AddEventListeners() {
|
||||
if (nsCOMPtr<EventTarget> eventTarget = GetEventTarget()) {
|
||||
eventTarget->AddSystemEventListener(u"mozvisualscroll"_ns, this, false);
|
||||
eventTarget->AddSystemEventListener(u"input"_ns, this, false);
|
||||
if (mozilla::SessionHistoryInParent()) {
|
||||
eventTarget->AddSystemEventListener(u"DOMTitleChanged"_ns, this, false);
|
||||
}
|
||||
mEventListenerRegistered = true;
|
||||
|
||||
eventTarget->AddSystemEventListener(u"MozSessionStorageChanged"_ns, this,
|
||||
false);
|
||||
mStorageChangeListenerRegistered = true;
|
||||
}
|
||||
}
|
||||
|
||||
void TabListener::RemoveEventListeners() {
|
||||
if (nsCOMPtr<EventTarget> eventTarget = GetEventTarget()) {
|
||||
if (mEventListenerRegistered) {
|
||||
eventTarget->RemoveSystemEventListener(u"mozvisualscroll"_ns, this,
|
||||
false);
|
||||
eventTarget->RemoveSystemEventListener(u"input"_ns, this, false);
|
||||
if (mozilla::SessionHistoryInParent()) {
|
||||
eventTarget->RemoveSystemEventListener(u"DOMTitleChanged"_ns, this,
|
||||
false);
|
||||
}
|
||||
mEventListenerRegistered = false;
|
||||
}
|
||||
if (mStorageChangeListenerRegistered) {
|
||||
eventTarget->RemoveSystemEventListener(u"MozSessionStorageChanged"_ns,
|
||||
this, false);
|
||||
mStorageChangeListenerRegistered = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TabListener::SetOwnerContent(Element* aElement) {
|
||||
MOZ_DIAGNOSTIC_ASSERT(aElement);
|
||||
RemoveEventListeners();
|
||||
mOwnerContent = aElement;
|
||||
AddEventListeners();
|
||||
}
|
||||
|
||||
/* static */
|
||||
void TabListener::TimerCallback(nsITimer* aTimer, void* aClosure) {
|
||||
auto listener = static_cast<TabListener*>(aClosure);
|
||||
@ -811,26 +839,7 @@ void TabListener::RemoveListeners() {
|
||||
}
|
||||
}
|
||||
|
||||
if (mEventListenerRegistered || mStorageChangeListenerRegistered) {
|
||||
nsCOMPtr<EventTarget> eventTarget = GetEventTarget();
|
||||
if (eventTarget) {
|
||||
if (mEventListenerRegistered) {
|
||||
eventTarget->RemoveSystemEventListener(u"mozvisualscroll"_ns, this,
|
||||
false);
|
||||
eventTarget->RemoveSystemEventListener(u"input"_ns, this, false);
|
||||
if (mozilla::SessionHistoryInParent()) {
|
||||
eventTarget->RemoveSystemEventListener(u"DOMTitleChanged"_ns, this,
|
||||
false);
|
||||
}
|
||||
mEventListenerRegistered = false;
|
||||
}
|
||||
if (mStorageChangeListenerRegistered) {
|
||||
eventTarget->RemoveSystemEventListener(u"MozSessionStorageChanged"_ns,
|
||||
this, false);
|
||||
mStorageChangeListenerRegistered = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
RemoveEventListeners();
|
||||
|
||||
if (mPrefObserverRegistered || mStorageObserverRegistered) {
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
|
@ -135,6 +135,7 @@ class TabListener : public nsIDOMEventListener,
|
||||
void SetEpoch(uint32_t aEpoch) { mEpoch = aEpoch; }
|
||||
uint32_t GetEpoch() { return mEpoch; }
|
||||
void UpdateSHistoryChanges(bool aImmediately);
|
||||
void SetOwnerContent(Element* aElement);
|
||||
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(TabListener, nsIDOMEventListener)
|
||||
@ -148,6 +149,8 @@ class TabListener : public nsIDOMEventListener,
|
||||
static void TimerCallback(nsITimer* aTimer, void* aClosure);
|
||||
void AddTimerForUpdate();
|
||||
void StopTimerForUpdate();
|
||||
void AddEventListeners();
|
||||
void RemoveEventListeners();
|
||||
bool UpdateSessionStore(uint32_t aFlushId = 0, bool aIsFinal = false);
|
||||
void ResetStorageChangeListener();
|
||||
void RemoveStorageChangeListener();
|
||||
|
Loading…
Reference in New Issue
Block a user