author Myk Melez <>
Tue, 10 Jan 2017 10:34:38 -0800
changeset 374209 58c050e010a596a5cbb419472714d2d68b8906c2
parent 369494 embedding/components/webbrowserpersist/WebBrowserPersistResourcesChild.cpp@2f5c53658a039b7cf7591b55eeae6240bbd96af5
child 502305 7e613710a9e121e1b903866148b3513ef312a47b
permissions -rw-r--r--
Bug 1309049 - move embedding/ files out of that directory, r=jst,mossop

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 * 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 */

#include "WebBrowserPersistResourcesChild.h"

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

namespace mozilla {



WebBrowserPersistResourcesChild::~WebBrowserPersistResourcesChild() = default;

WebBrowserPersistResourcesChild::VisitResource(nsIWebBrowserPersistDocument *aDocument,
                                               const nsACString& aURI)
    nsCString copiedURI(aURI); // Yay, XPIDL/IPDL mismatch.
    return NS_OK;

WebBrowserPersistResourcesChild::VisitDocument(nsIWebBrowserPersistDocument* aDocument,
                                               nsIWebBrowserPersistDocument* aSubDocument)
    auto* subActor = new WebBrowserPersistDocumentChild();
    // As a consequence of how PWebBrowserPersistDocumentConstructor
    // can be sent by both the parent and the child, we must pass the
    // aBrowser and outerWindowID arguments here, but the values are
    // ignored by the parent.  In particular, the TabChild in which
    // persistence started does not necessarily exist at this point;
    // see bug 1203602.
    if (!Manager()->Manager()
        ->SendPWebBrowserPersistDocumentConstructor(subActor, nullptr, 0)) {
        // NOTE: subActor is freed at this point.
        return NS_ERROR_FAILURE;
    // ...but here, IPC won't free subActor until after this returns
    // to the event loop.

    // The order of these two messages will be preserved, because
    // they're the same toplevel protocol and priority.
    // With this ordering, it's always the transition out of START
    // state that causes a document's parent actor to be exposed to
    // XPCOM (for both parent->child and child->parent construction),
    // which simplifies the lifetime management.
    return NS_OK;

WebBrowserPersistResourcesChild::EndVisit(nsIWebBrowserPersistDocument *aDocument,
                                          nsresult aStatus)
    Send__delete__(this, aStatus);
    return NS_OK;

} // namespace mozilla