/* 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/. */ //! The high-level interface from script to constellation. Using this abstract interface helps //! reduce coupling between these two components. use geom::rect::Rect; use geom::size::TypedSize2D; use geom::scale_factor::ScaleFactor; use http::headers::request::HeaderCollection as RequestHeaderCollection; use http::method::{Method, Get}; use layers::geometry::DevicePixel; use servo_util::geometry::{PagePx, ViewportPx}; use std::comm::{channel, Sender, Receiver}; use url::Url; #[deriving(Clone)] pub struct ConstellationChan(pub Sender); impl ConstellationChan { pub fn new() -> (Receiver, ConstellationChan) { let (chan, port) = channel(); (port, ConstellationChan(chan)) } } #[deriving(PartialEq)] pub enum IFrameSandboxState { IFrameSandboxed, IFrameUnsandboxed } // We pass this info to various tasks, so it lives in a separate, cloneable struct. #[deriving(Clone)] pub struct Failure { pub pipeline_id: PipelineId, pub subpage_id: Option, } pub struct WindowSizeData { /// The size of the initial layout viewport, before parsing an /// http://www.w3.org/TR/css-device-adapt/#initial-viewport pub initial_viewport: TypedSize2D, /// The "viewing area" in page px. See `PagePx` documentation for details. pub visible_viewport: TypedSize2D, /// The resolution of the window in dppx, not including any "pinch zoom" factor. pub device_pixel_ratio: ScaleFactor, } #[deriving(PartialEq)] pub enum KeyState { Pressed, Released, Repeated, } //N.B. Straight up copied from glfw-rs #[deriving(Show)] pub enum Key { KeySpace, KeyApostrophe, KeyComma, KeyMinus, KeyPeriod, KeySlash, Key0, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, KeySemicolon, KeyEqual, KeyA, KeyB, KeyC, KeyD, KeyE, KeyF, KeyG, KeyH, KeyI, KeyJ, KeyK, KeyL, KeyM, KeyN, KeyO, KeyP, KeyQ, KeyR, KeyS, KeyT, KeyU, KeyV, KeyW, KeyX, KeyY, KeyZ, KeyLeftBracket, KeyBackslash, KeyRightBracket, KeyGraveAccent, KeyWorld1, KeyWorld2, KeyEscape, KeyEnter, KeyTab, KeyBackspace, KeyInsert, KeyDelete, KeyRight, KeyLeft, KeyDown, KeyUp, KeyPageUp, KeyPageDown, KeyHome, KeyEnd, KeyCapsLock, KeyScrollLock, KeyNumLock, KeyPrintScreen, KeyPause, KeyF1, KeyF2, KeyF3, KeyF4, KeyF5, KeyF6, KeyF7, KeyF8, KeyF9, KeyF10, KeyF11, KeyF12, KeyF13, KeyF14, KeyF15, KeyF16, KeyF17, KeyF18, KeyF19, KeyF20, KeyF21, KeyF22, KeyF23, KeyF24, KeyF25, KeyKp0, KeyKp1, KeyKp2, KeyKp3, KeyKp4, KeyKp5, KeyKp6, KeyKp7, KeyKp8, KeyKp9, KeyKpDecimal, KeyKpDivide, KeyKpMultiply, KeyKpSubtract, KeyKpAdd, KeyKpEnter, KeyKpEqual, KeyLeftShift, KeyLeftControl, KeyLeftAlt, KeyLeftSuper, KeyRightShift, KeyRightControl, KeyRightAlt, KeyRightSuper, KeyMenu, } bitflags! { flags KeyModifiers: u8 { const SHIFT = 0x01, const CONTROL = 0x02, const ALT = 0x04, const SUPER = 0x08, } } /// Messages from the compositor and script to the constellation. pub enum Msg { ExitMsg, FailureMsg(Failure), InitLoadUrlMsg(Url), LoadCompleteMsg, FrameRectMsg(PipelineId, SubpageId, Rect), LoadUrlMsg(PipelineId, LoadData), ScriptLoadedURLInIFrameMsg(Url, PipelineId, SubpageId, IFrameSandboxState), NavigateMsg(NavigationDirection), RendererReadyMsg(PipelineId), ResizedWindowMsg(WindowSizeData), KeyEvent(Key, KeyState, KeyModifiers), } /// Similar to net::resource_task::LoadData /// can be passed to LoadUrlMsg to load a page with GET/POST /// parameters or headers #[deriving(Clone)] pub struct LoadData { pub url: Url, pub method: Method, pub headers: RequestHeaderCollection, pub data: Option>, } impl LoadData { pub fn new(url: Url) -> LoadData { LoadData { url: url, method: Get, headers: RequestHeaderCollection::new(), data: None, } } } /// Represents the two different ways to which a page can be navigated #[deriving(Clone, PartialEq, Hash, Show)] pub enum NavigationType { Load, // entered or clicked on a url Navigate, // browser forward/back buttons } #[deriving(Clone, PartialEq, Hash, Show)] pub enum NavigationDirection { Forward, Back, } #[deriving(Clone, PartialEq, Eq, Hash, Show)] pub struct PipelineId(pub uint); #[deriving(Clone, PartialEq, Eq, Hash, Show)] pub struct SubpageId(pub uint);