gecko-dev/dom/ipc/TabMessageUtils.h
Jim Porter f9d5e48623 Bug 1493225, part 2 - Cancel content JS when navigating through history to prevent hangs r=smaug
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
2019-04-30 23:31:36 +00:00

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