hal/WindowIdentifier.cpp
author Nathan Froyd <froydnj@mozilla.com>
Mon, 22 Apr 2019 23:44:28 +0000
changeset 470426 09240f7397c12707cc0a8ff63051d28568be40e9
parent 448947 6f3709b3878117466168c40affa7bca0b60cf75b
child 482213 9d2191d704555dd3e535ad9b5c451919af3c8bb1
permissions -rw-r--r--
Bug 1542958 - fix code section adjustments in elfhack; r=glandium We were never adjusting `last` in this loop, so we were computing the wrong addresses for all sections beyond the first. Which in turn meant that we would compute the wrong size for the section data we needed to allocate. Differential Revision: https://phabricator.services.mozilla.com/D28195

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set sw=2 ts=8 et ft=cpp : */
/* 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/. */

#include "WindowIdentifier.h"

#include "mozilla/dom/ContentChild.h"
#include "nsPIDOMWindow.h"

namespace mozilla {
namespace hal {

WindowIdentifier::WindowIdentifier() : mWindow(nullptr), mIsEmpty(true) {}

WindowIdentifier::WindowIdentifier(nsPIDOMWindowInner* window)
    : mWindow(window), mIsEmpty(false) {
  mID.AppendElement(GetWindowID());
}

WindowIdentifier::WindowIdentifier(const InfallibleTArray<uint64_t>& id,
                                   nsPIDOMWindowInner* window)
    : mID(id), mWindow(window), mIsEmpty(false) {
  mID.AppendElement(GetWindowID());
}

WindowIdentifier::WindowIdentifier(const WindowIdentifier& other)
    : mID(other.mID), mWindow(other.mWindow), mIsEmpty(other.mIsEmpty) {}

const InfallibleTArray<uint64_t>& WindowIdentifier::AsArray() const {
  MOZ_ASSERT(!mIsEmpty);
  return mID;
}

bool WindowIdentifier::HasTraveledThroughIPC() const {
  MOZ_ASSERT(!mIsEmpty);
  return mID.Length() >= 2;
}

void WindowIdentifier::AppendProcessID() {
  MOZ_ASSERT(!mIsEmpty);
  mID.AppendElement(dom::ContentChild::GetSingleton()->GetID());
}

uint64_t WindowIdentifier::GetWindowID() const {
  MOZ_ASSERT(!mIsEmpty);
  return mWindow ? mWindow->WindowID() : UINT64_MAX;
}

nsPIDOMWindowInner* WindowIdentifier::GetWindow() const {
  MOZ_ASSERT(!mIsEmpty);
  return mWindow;
}

}  // namespace hal
}  // namespace mozilla