mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-10 21:28:04 +02:00
In this part, we pass along the navigation type (and index for when using the dropdown on the back/forward buttons). This allows us to check if there's a top-level load "between" the start and end pages. The patch might look a bit strange, since we're passing the navigation operation to two places from RemoteWebNavigation.js (the normal message passing that existed before this patch and the HangMonitor channel in this patch). This is primarily to make it easier to stop passing the navigation info along the HangMonitor channel once session history is uplifted into the parent process. At that point, the check for whether there's a top-level load could happen in TabParent (I think). Differential Revision: https://phabricator.services.mozilla.com/D23090 --HG-- extra : moz-landing-system : lando
78 lines
2.3 KiB
C++
78 lines
2.3 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 TABMESSAGE_UTILS_H
|
|
#define TABMESSAGE_UTILS_H
|
|
|
|
#include "ipc/IPCMessageUtils.h"
|
|
#include "mozilla/RefPtr.h"
|
|
#include "mozilla/dom/Event.h"
|
|
#include "nsExceptionHandler.h"
|
|
#include "nsIRemoteTab.h"
|
|
#include "nsPIDOMWindow.h"
|
|
#include "nsCOMPtr.h"
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
class Event;
|
|
|
|
struct RemoteDOMEvent {
|
|
// Make sure to set the owner after deserializing.
|
|
RefPtr<Event> mEvent;
|
|
};
|
|
|
|
bool ReadRemoteEvent(const IPC::Message* aMsg, PickleIterator* aIter,
|
|
mozilla::dom::RemoteDOMEvent* aResult);
|
|
|
|
typedef CrashReporter::ThreadId NativeThreadId;
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
namespace IPC {
|
|
|
|
template <>
|
|
struct ParamTraits<mozilla::dom::RemoteDOMEvent> {
|
|
typedef mozilla::dom::RemoteDOMEvent paramType;
|
|
|
|
static void Write(Message* aMsg, const paramType& aParam) {
|
|
aParam.mEvent->Serialize(aMsg, true);
|
|
}
|
|
|
|
static bool Read(const Message* aMsg, PickleIterator* aIter,
|
|
paramType* aResult) {
|
|
return mozilla::dom::ReadRemoteEvent(aMsg, aIter, aResult);
|
|
}
|
|
|
|
static void Log(const paramType& aParam, std::wstring* aLog) {}
|
|
};
|
|
|
|
template <>
|
|
struct ParamTraits<nsEventStatus>
|
|
: public ContiguousEnumSerializer<nsEventStatus, nsEventStatus_eIgnore,
|
|
nsEventStatus_eSentinel> {};
|
|
|
|
template <>
|
|
struct ParamTraits<nsSizeMode>
|
|
: public ContiguousEnumSerializer<nsSizeMode, nsSizeMode_Normal,
|
|
nsSizeMode_Invalid> {};
|
|
|
|
template <>
|
|
struct ParamTraits<UIStateChangeType>
|
|
: public ContiguousEnumSerializer<UIStateChangeType,
|
|
UIStateChangeType_NoChange,
|
|
UIStateChangeType_Invalid> {};
|
|
|
|
template <>
|
|
struct ParamTraits<nsIRemoteTab::NavigationType>
|
|
: public ContiguousEnumSerializerInclusive<
|
|
nsIRemoteTab::NavigationType,
|
|
nsIRemoteTab::NavigationType::NAVIGATE_BACK,
|
|
nsIRemoteTab::NavigationType::NAVIGATE_URL> {};
|
|
|
|
} // namespace IPC
|
|
|
|
#endif // TABMESSAGE_UTILS_H
|