123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* 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_BrowserElementHelpers_h
- #define mozilla_BrowserElementHelpers_h
- #include "nsAString.h"
- #include "mozilla/gfx/Point.h"
- #include "mozilla/gfx/Rect.h"
- #include "Units.h"
- #include "mozilla/dom/Element.h"
- class nsIDOMWindow;
- class nsIURI;
- namespace mozilla {
- namespace dom {
- class TabParent;
- } // namespace dom
- namespace layers {
- struct TextureFactoryIdentifier;
- } // namespace layers
- namespace layout {
- class PRenderFrameParent;
- } // namespace layout
- /**
- * BrowserElementParent implements a portion of the parent-process side of
- * <iframe mozbrowser>.
- *
- * Most of the parent-process side of <iframe mozbrowser> is implemented in
- * BrowserElementParent.js. This file implements the few parts of this
- * functionality which must be written in C++.
- *
- * We don't communicate with the JS code that lives in BrowserElementParent.js;
- * the JS and C++ parts are completely separate.
- */
- class BrowserElementParent
- {
- public:
- /**
- * Possible results from a window.open call.
- * ADDED - The frame was added to a document (i.e. handled by the embedder).
- * IGNORED - The frame was not added to a document and the embedder didn't
- * call preventDefault() to prevent the platform from handling the call.
- * CANCELLED - The frame was not added to a document, but the embedder still
- * called preventDefault() to prevent the platform from handling the call.
- */
- enum OpenWindowResult {
- OPEN_WINDOW_ADDED,
- OPEN_WINDOW_IGNORED,
- OPEN_WINDOW_CANCELLED
- };
- /**
- * Handle a window.open call from an out-of-process <iframe mozbrowser>.
- *
- * window.open inside <iframe mozbrowser> doesn't actually open a new
- * top-level window. Instead, the "embedder" (the document which contains
- * the <iframe mozbrowser> whose content called window.open) gets the
- * opportunity to place a new <iframe mozbrowser> in the DOM somewhere. This
- * new "popup" iframe acts as the opened window.
- *
- * This method proceeds in three steps.
- *
- * 1) We fire a mozbrowseropenwindow CustomEvent on the opener
- * iframe element. This event's detail is an instance of
- * OpenWindowEventDetail.
- *
- * 2) The embedder (the document which contains the opener iframe) can accept
- * the window.open request by inserting event.detail.frameElement (an iframe
- * element) into the DOM somewhere.
- *
- * 3) If the embedder accepted the window.open request, we return true and
- * set aPopupTabParent's frame element to event.detail.frameElement.
- * Otherwise, we return false.
- *
- * @param aURL the URL the new window should load. The empty string is
- * allowed.
- * @param aOpenerTabParent the TabParent whose TabChild called window.open.
- * @param aPopupTabParent the TabParent inside which the opened window will
- * live.
- * @return an OpenWindowresult that describes whether the embedder added the
- * frame to a document and whether it called preventDefault to prevent
- * the platform from handling the open request.
- */
- static OpenWindowResult
- OpenWindowOOP(dom::TabParent* aOpenerTabParent,
- dom::TabParent* aPopupTabParent,
- layout::PRenderFrameParent* aRenderFrame,
- const nsAString& aURL,
- const nsAString& aName,
- const nsAString& aFeatures,
- layers::TextureFactoryIdentifier* aTextureFactoryIdentifier,
- uint64_t* aLayersId);
- /**
- * Handle a window.open call from an in-process <iframe mozbrowser>.
- *
- * (These parameter types are silly, but they match what our caller has in
- * hand. Feel free to add an override, if they are inconvenient to you.)
- *
- * @param aURI the URI the new window should load. May be null.
- * @return an OpenWindowResult that describes whether the browser added the
- * frame to a document or whether they called preventDefault to prevent
- * the platform from handling the open request
- */
- static OpenWindowResult
- OpenWindowInProcess(nsPIDOMWindowOuter* aOpenerWindow,
- nsIURI* aURI,
- const nsAString& aName,
- const nsACString& aFeatures,
- bool aForceNoOpener,
- mozIDOMWindowProxy** aReturnWindow);
- private:
- static OpenWindowResult
- DispatchOpenWindowEvent(dom::Element* aOpenerFrameElement,
- dom::Element* aPopupFrameElement,
- const nsAString& aURL,
- const nsAString& aName,
- const nsAString& aFeatures);
- };
- } // namespace mozilla
- #endif
|