mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
8b553ecfcf
This patch enables sandboxed srcdoc loads to take place via DocumentChannel, and adds mechanisms for enabling unsandboxed ones. Both unsandboxed srcdoc, and in subsequent patches, about:blank, loads require that the triggering principal and the principal to inherit point to the same instance if the load takes place in the same process as where we are inheriting those principals from. We save those principals on a target browsing context before we load the URI, and later, when we are deserializing LoadInfoArgs into LoadInfo in the content process, we retrieve the saved principals if the current load identifier of the target BC matches the load identifier saved along with the principals. We also need to make sure that during a process switch for about:srcdoc load, we don't use the original URI for about:srcdoc to determine the remote type and instead we use channel's result principal. Differential Revision: https://phabricator.services.mozilla.com/D85079
71 lines
2.1 KiB
C++
71 lines
2.1 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 mozilla_dom_BrowserBridgeHost_h
|
|
#define mozilla_dom_BrowserBridgeHost_h
|
|
|
|
#include "mozilla/dom/RemoteBrowser.h"
|
|
#include "mozilla/dom/BrowserBridgeChild.h"
|
|
|
|
namespace mozilla {
|
|
|
|
namespace dom {
|
|
|
|
/**
|
|
* BrowserBridgeHost manages a remote browser from a content process.
|
|
*
|
|
* It is used via the RemoteBrowser interface in nsFrameLoader and proxies
|
|
* work to the chrome process via PBrowserBridge.
|
|
*
|
|
* See `dom/docs/Fission-IPC-Diagram.svg` for an overview of the DOM IPC
|
|
* actors.
|
|
*/
|
|
class BrowserBridgeHost : public RemoteBrowser {
|
|
public:
|
|
typedef mozilla::layers::LayersId LayersId;
|
|
|
|
explicit BrowserBridgeHost(BrowserBridgeChild* aChild);
|
|
|
|
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
|
NS_DECL_CYCLE_COLLECTION_CLASS(BrowserBridgeHost)
|
|
|
|
// Get the IPDL actor for the BrowserBridgeChild.
|
|
BrowserBridgeChild* GetActor() { return mBridge; }
|
|
|
|
BrowserHost* AsBrowserHost() override { return nullptr; }
|
|
BrowserBridgeHost* AsBrowserBridgeHost() override { return this; }
|
|
|
|
TabId GetTabId() const override;
|
|
LayersId GetLayersId() const override;
|
|
BrowsingContext* GetBrowsingContext() const override;
|
|
nsILoadContext* GetLoadContext() const override;
|
|
|
|
void LoadURL(nsDocShellLoadState* aLoadState) override;
|
|
void ResumeLoad(uint64_t aPendingSwitchId) override;
|
|
void DestroyStart() override;
|
|
void DestroyComplete() override;
|
|
|
|
bool Show(const OwnerShowInfo&) override;
|
|
void UpdateDimensions(const nsIntRect& aRect,
|
|
const ScreenIntSize& aSize) override;
|
|
|
|
void UpdateEffects(EffectsInfo aInfo) override;
|
|
|
|
private:
|
|
virtual ~BrowserBridgeHost() = default;
|
|
|
|
already_AddRefed<nsIWidget> GetWidget() const;
|
|
|
|
// The IPDL actor for proxying browser operations
|
|
RefPtr<BrowserBridgeChild> mBridge;
|
|
EffectsInfo mEffectsInfo;
|
|
};
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_dom_BrowserBridgeHost_h
|