Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(833)

Unified Diff: content/common/frame.mojom

Issue 2821473002: Service CreateNewWindow on the UI thread with a new mojo interface (Closed)
Patch Set: MakeShared goodness Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/common/frame.mojom
diff --git a/content/common/frame.mojom b/content/common/frame.mojom
index affcff1f5cbb82374823444bcbd30a46388c8e84..c864e2f6efec7cc37e4ec935d184d18233026bbd 100644
--- a/content/common/frame.mojom
+++ b/content/common/frame.mojom
@@ -4,7 +4,12 @@
module content.mojom;
+import "content/public/common/window_container_type.mojom";
import "services/service_manager/public/interfaces/interface_provider.mojom";
+import "third_party/WebKit/public/platform/referrer.mojom";
+import "third_party/WebKit/public/web/window_features.mojom";
+import "ui/base/mojo/window_open_disposition.mojom";
+import "url/mojo/url.mojom";
// The name of the InterfaceProviderSpec in service manifests used by the
// frame tree to expose frame-specific interfaces between renderer and browser.
@@ -26,12 +31,85 @@ interface FrameBindingsControl {
};
// Implemented by the frame server (i.e. the browser process).
-interface FrameHost {
+interface FrameHostInterfaceBroker {
GetInterfaceProvider(service_manager.mojom.InterfaceProvider& interfaces);
};
// Implemented by a service that provides implementations of the Frame
// interface. (e.g. renderer processes).
interface FrameFactory {
- CreateFrame(int32 frame_routing_id, Frame& frame, FrameHost host);
+ CreateFrame(int32 frame_routing_id, Frame& frame, FrameHostInterfaceBroker host);
+};
+
+// TODO(csharrison): Clean up this struct. Some of the entries (like
+// opener_top_level_frame_url) are better suited to be computed in the browser
+// process. See http://crbug.com/674307.
+struct CreateNewWindowParams {
+ // True if this open request came in the context of a user gesture.
+ bool user_gesture;
+
+ // Type of window requested.
+ WindowContainerType window_container_type;
+
+ // The session storage namespace ID this window should use.
+ int64 session_storage_namespace_id;
+
+ // The name of the resulting frame that should be created (empty if none
+ // has been specified). UTF8 encoded string.
+ string frame_name;
+
+ // The URL of the frame initiating the open.
+ url.mojom.Url opener_url;
+
+ // The URL of the top frame containing the opener.
+ url.mojom.Url opener_top_level_frame_url;
+
+ // The security origin of the frame initiating the open.
+ url.mojom.Url opener_security_origin;
+
+ // Whether the opener will be suppressed in the new window, in which case
+ // scripting the new window is not allowed.
+ bool opener_suppressed;
+
+ // Whether the window should be opened in the foreground, background, etc.
+ ui.mojom.WindowOpenDisposition disposition;
+
+ // The URL that will be loaded in the new window (empty if none has been
+ // specified).
+ url.mojom.Url target_url;
+
+ // The referrer that will be used to load |target_url| (empty if none has
+ // been specified).
+ blink.mojom.Referrer referrer;
+
+ // The window features to use for the new window.
+ blink.mojom.WindowFeatures features;
+};
+
+struct CreateNewWindowReply {
+ // The ID of the view to be created. If the ID is MSG_ROUTING_NONE, then the
+ // opener RenderFrame should not create a RenderView in its process.
+ // MSG_ROUTING_NONE does not necessarily indicate failure; it may also occur
+ // in cases where a window was created, but the opener relationship is
+ // severed.
+ int32 route_id;
+
+ // The ID of the main frame hosted in the view.
+ int32 main_frame_route_id;
+
+ // The ID of the widget for the main frame.
+ int32 main_frame_widget_route_id;
+
+ // Duplicated from CreateNewWindowParams because legacy code.
+ int64 cloned_session_storage_namespace_id;
+};
+
+// Implemented by the frame server (i.e. the browser process). For messages that
+// must be associated with the IPC channel.
+interface FrameHost {
+ // Sent by the renderer when it is creating a new window. The browser creates
+ // a tab for it. If |reply.route_id| is MSG_ROUTING_NONE, the window couldn't
+ // be created.
+ [Sync] CreateNewWindow(CreateNewWindowParams params)
+ => (CreateNewWindowReply reply);
};

Powered by Google App Engine
This is Rietveld 408576698