Jan Borsodi avatar Jan Borsodi committed faa9fda

Moved services and hob config to a separate repo (scope-services on kaleidoscope).

Comments (0)

Files changed (10)

hob.conf

-[hob]
-# Which target configuration is the default
-target = next
-
-[services]
-# Where to look for service files, default is too look in "services" in CWD
-path = services
-
-[target.current]
-# No releases has been made yet
-ConsoleLogger      = console_logger/console_logger.proto
-EcmascriptDebugger = ecmascript_debugger/ecmascript_debugger.proto
-EcmascriptLogger   = ecmascript_logger/ecmascript_logger.proto
-Exec               = exec/exec.proto
-HttpLogger         = http_logger/http_logger.proto
-Scope              = scope/scope.proto
-UrlPlayer          = url_player/url_player.proto
-WindowManager      = window_manager/window_manager.proto
-
-# This one is currently not in use
-#ProbedataServer    = probedata_server/probedata_server.proto
-
-[target.next]
-ConsoleLogger      = console_logger/console_logger.proto
-EcmascriptDebugger = ecmascript_debugger/ecmascript_debugger.proto
-EcmascriptLogger   = ecmascript_logger/ecmascript_logger.proto
-Exec               = exec/exec.proto
-HttpLogger         = http_logger/http_logger.proto
-Scope              = scope/scope.proto
-UrlPlayer          = url_player/url_player.proto
-WindowManager      = window_manager/window_manager.proto
-
-# This one is currently not in use
-#ProbedataServer    = probedata_server/probedata_server.proto

services/console_logger/console_logger.proto

-syntax = scope;
-
-message ConsoleMessage
-{
-    /**
-     * The window ID is shared across scope. Notably, it's the same as in the ecmascript debugger.
-     * INTERNAL: The value is from Window::id
-     */
-    required uint32 windowID    = 1;
-    /**
-     * 
-     * The number of seconds since 1970-01-01T00:00:00Z.
-     */
-    required uint32 time        = 2;
-    /**
-     * Description of the error. Sometimes this message only makes sense when
-     * displayed in a monospace font.
-     */
-    required string description = 3;
-    /**
-     * The URL of the entity (document, script, style file, etc) that caused the
-     * message to be generated.
-     */
-    optional string uri         = 4;
-    /**
-     * The context in which the message was generated; it is intended for human
-     * consumption and provides additional information about the context for the
-     * message.
-     */
-    optional string context     = 5;
-    /**
-     * The component in Opera that generated the message
-     * One of:
-     * - "ecmascript"
-     * - "java"
-     * - "m2"
-     * - "network"
-     * - "xml"
-     * - "html"
-     * - "css"
-     * - "xslt"
-     * - "svg"
-     * - "bittorrent"
-     * - "voice"
-     * - "widget"
-     * - "selftest"
-     */
-    optional string source      = 6;
-    /**
-     * One of:
-     * - "debug"
-     * - "verbose"
-     * - "information"
-     * - "error"
-     * - "critical"
-     */
-    optional string severity    = 7;
-}
-
-/**
- * The `console-logger` is a noninteractive tool used to log
- * messages sent to Opera's console.
- *
- * All messages sent to the Opera console from the various
- * modules in Opera are captured and displayed.
- */
-service ConsoleLogger
-{
-    option (cpp_hfile) = "modules/scope/src/scope_console_logger.h";
-    option (core_release) = "2.5";
-    option (version) = "2.0";
-    option (cpp_class) = OpScopeConsoleLogger;
- 
-    event OnConsoleMessage returns (ConsoleMessage) = 1;
-}

services/ecmascript_debugger/ecmascript_debugger.proto

-syntax = scope;
-
-message CssStylesheetList
-{
-    message Stylesheet
-    {
-        required uint32 objectID           = 1;
-        required bool   isDisabled         = 2;
-        required string href               = 3;
-        required string title              = 4;
-        required string type               = 5;
-        repeated string mediaList          = 6;
-        optional uint32 ownerNodeID        = 7;
-        optional uint32 ownerRuleID        = 8;
-        optional uint32 parentStylesheetID = 9;
-    }
-
-    repeated Stylesheet stylesheetList = 1;
-}
-
-message ExamineList
-{
-    required uint32 runtimeID  = 1;
-    repeated uint32 objectList = 2;
-}
-
-message BreakpointID
-{
-    /**
-     * See BreakpointPosition.breakpointID.
-     */
-    required uint32 breakpointID = 1;
-}
-
-message BacktraceSelection
-{
-    required uint32 runtimeID = 1;
-    required uint32 threadID  = 2;
-    /**
-     * If omitted (or 0) all frames are returned.
-     */
-    optional uint32 maxFrames = 3 [default = 0];
-}
-
-/**
- * The drawing order is box, reference-box-frame, box-frame, grid.
- */
-message SpotlightObject
-{
-    /**
-     * Colors are encoded as RGBA with 8 bits for each channel.
-     * encoded_color = ( red << 24 ) + ( green << 16 ) + ( blue << 8 ) + ( alpha ) 
-     * with red, green, blue and alpha in a range of 0 - 255
-     * e.g.:
-     * 
-     *     red     4278190335
-     *     green     16711935
-     *     blue         65535
-     *     yellow  4294902015
-     *     cyan      16777215
-     *     magenta 4278255615
-     */
-    message SpotlightBox
-    {
-        /**
-         * Valid values:
-         *   0: dimension
-         *   1: padding
-         *   2: border
-         *   3: margin
-         */
-        required uint32 boxType    = 1;
-        optional uint32 fillColor  = 2;
-        /**
-         * Drawn with 1px width inside the box
-         */
-        optional uint32 frameColor = 3;
-        /**
-         * Drawn with 1px width inside the box over the whole document
-         */
-        optional uint32 gridColor  = 4;
-    }
-
-    required uint32       objectID       = 1;
-    /**
-     * Chooses whether the given object should be scrolled into view or not.
-     */
-    required bool         scrollIntoView = 2;
-    repeated SpotlightBox boxList        = 3;
-}
-
-message RuntimeInfo
-{
-    required uint32 runtimeID     = 1;
-    required string htmlFramePath = 2;
-    /**
-     * the ID of the window
-     */
-    required uint32 windowID      = 3;
-    /**
-     * the 'global' object
-     */
-    required uint32 objectID      = 4;
-    /**
-     * the document's URI
-     */
-    required string uri           = 5;
-}
-
-message NodeInfo
-{
-    message Attribute
-    {
-        required string namePrefix = 1;
-        required string name       = 2;
-        required string value      = 3;
-    }
-
-    required uint32    objectID        =  1;
-    required uint32    type            =  2;
-    required string    name            =  3;
-    required uint32    depth           =  4;
-    /**
-     * Used if type is 1.
-     */
-    optional string    namespacePrefix =  5;
-    /**
-     * Used if type is 1.
-     */
-    repeated Attribute attributeList   =  6;
-    /**
-     * Used if type is 1.
-     */
-    optional uint32    childrenLength  =  7;
-    /**
-     * Used if type is 3, 4, 7 or 8.
-     */
-    optional string    value           =  8;
-    /**
-     * Used if type is 10.
-     */
-    optional string    publicID        =  9;
-    /**
-     * Used if type is 10.
-     */
-    optional string    systemID        = 10;
-}
-
-message EventHandlerID
-{
-    /**
-     * `handlerID` as specified in EventHandler.handlerID.
-     */
-    required uint32 handlerID = 1;
-}
-
-message ThreadInfo
-{
-    required uint32 runtimeID      = 1;
-    required uint32 threadID       = 2;
-    required uint32 parentThreadID = 3;
-    /**
-     * One of:
-     * - `"inline"`
-     * - `"event"`
-     * - `"linked"`
-     * - `"timeout"`
-     * - `"java"`
-     * - `"unknown"`
-     */
-    required string threadType     = 4;
-    /**
-     * present if `threadType` is `"event"`
-     */
-    optional string eventNamespace = 5;
-    /**
-     * present if `threadType` is `"event"`
-     */
-    optional string eventType      = 6;
-}
-
-message BacktraceFrame
-{
-    required uint32      functionID     = 1;
-    required uint32      argumentObject = 2;
-    required uint32      variableObject = 3;
-    required uint32      thisObject     = 4;
-    /**
-     * TODO: Spec says repeated, while the code only assumes one (optional)
-     */
-    optional ObjectValue objectValue    = 5;
-    optional uint32      scriptID       = 6;
-    optional uint32      lineNumber     = 7;
-}
-
-message RuntimeID
-{
-    required uint32 runtimeID = 1;
-}
-
-message RuntimeSelection
-{
-    /**
-     * List the ones you want to see, or none if you want all (also set `allRuntimes`).
-     */
-    repeated uint32 runtimeList = 1;
-    /**
-     * Create runtimes for all documents. Runtimes are normally not created for documents
-     * without ECMAScript.
-     */
-    optional bool   allRuntimes = 2;
-}
-
-message ObjectInfo
-{
-    /**
-     * If `type` is ... then ... is present:
-     *   "object", `objectValue`
-     *   "number", `value`
-     *   "string", `value`
-     *   "boolean", `value` (`"true"` or `"false"`)
-     * Otherwise (`"undefined"` or `"null"`), only `type` is present.
-     */
-    message Property
-    {
-        required string      name        = 1;
-        /**
-         * One of:
-         * - `"number"`
-         * - `"boolean"`
-         * - `"string"`
-         * - `"null"`
-         * - `"undefined"`
-         * - `"object"`
-         */
-        required string      type        = 2;
-        /**
-         * Only present for `"number"`, `"string"` or `"boolean"`
-         */
-        optional string      value       = 3;
-        /**
-         * Only present for `"object"`
-         */
-        optional ObjectValue objectValue = 4;
-    }
-
-    required ObjectValue value        = 1;
-    repeated Property    propertyList = 2;
-}
-
-message CssElementSelection
-{
-    required uint32 runtimeID = 1;
-    required uint32 objectID  = 2;
-}
-
-message DomEvent
-{
-    /**
-     * Refers to the target of the event.
-     */
-    required uint32 objectID  = 1;
-    required uint32 handlerID = 2;
-    /**
-     * The event type is e.g., `"click"`, `"mousemove"`
-     * More examples are at http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html
-     * Exactly which events are implemented depends on the host, and is not defined in this protocol.
-     */
-    required string eventType = 3;
-}
-
-message ThreadResult
-{
-    required uint32 runtimeID = 1;
-    required uint32 threadID  = 2;
-    /**
-     * One of:
-     * - `"completed"`
-     * - `"unhandled-exception"`
-     * - `"aborted"`
-     * - `"cancelled-by-scheduler"`
-     */
-    required string status    = 3;
-}
-
-/**
- * Frames are in innermost-first order.
- */
-message BacktraceFrameList
-{
-    repeated BacktraceFrame frameList = 1;
-}
-
-message NodeList
-{
-    repeated NodeInfo nodeList = 1;
-}
-
-message FrameSelection
-{
-    required uint32 runtimeID = 1;
-    required uint32 threadID  = 2;
-    required uint32 frameID   = 3;
-}
-
-
-/**
- *
- * Central data types and how they work:
- *
- * A "runtime" represents a document context in which threads execute.
- * There is a one-to-one mapping between runtimes and HTML documents.
- *
- * A "thread" represents a thread of execution in a runtime.  A "parent"
- * thread can be preempted by another "child" thread in order to respond
- * to a priority event; the parent thread will not run again until the
- * child thread has finished.
- *
- * A "script" is a pair (id, source code) where the id is globally
- * unique and the source code is Unicode text.
- *
- * An "object" is represented by a globally unique ID that is assigned by
- * the debugger.
- *
- * Globally unique means unique within a running Opera session; that is
- * from starting Opera to stopping it.
- *
- * The windowID is shared across scope. Notably, it's the same as in the console logger and window manager
- * INTERNAL: The value is from Window::id
- */ 
-service EcmascriptDebugger
-{
-    option (cpp_hfile) = "modules/scope/src/scope_ecmascript_debugger.h";
-    option (core_release) = "2.5";
-    option (version) = "5.0";
-    option (cpp_class) = ES_ScopeDebugFrontend;
- 
-    command ListRuntimes(RuntimeSelection) returns (RuntimeList) = 1;
-    command ContinueThread(ThreadMode) returns (Default) = 2;
-    command Eval(EvalData) returns (EvalResult) = 3 {
-        option (cpp_response) = deferred;
-
-    };
-    command ExamineObjects(ExamineList) returns (ObjectList) = 4;
-    command SpotlightObject(SpotlightObjectSelection) returns (Default) = 5;
-    command AddBreakpoint(BreakpointPosition) returns (Default) = 6;
-    command RemoveBreakpoint(BreakpointID) returns (Default) = 7;
-    /**
-     * Add an event handler. This will generate a OnHandleEvent event every time the XML event defined
-     * by the pair (`namespace`, `eventType`) reaches the object defined by `objectID` in the capturing
-     * phase. XML events are defined in http://www.w3.org/TR/xml-events
-     */
-    command AddEventHandler(EventHandler) returns (Default) = 8;
-    command RemoveEventHandler(EventHandlerID) returns (Default) = 9;
-    command SetConfiguration(Configuration) returns (Default) = 10;
-    command GetBacktrace(BacktraceSelection) returns (BacktraceFrameList) = 11;
-    command Break(BreakSelection) returns (Default) = 12;
-    command InspectDom(DomTraversal) returns (NodeList) = 13;
-    command CssGetIndexMap(Default) returns (CssIndexMap) = 22;
-    command CssGetAllStylesheets(RuntimeID) returns (CssStylesheetList) = 23;
-    command CssGetStylesheet(CssStylesheetSelection) returns (CssStylesheetRules) = 24;
-    command CssGetStyleDeclarations(CssElementSelection) returns (CssStyleDeclarations) = 25;
-    command GetSelectedObject(Default) returns (ObjectSelection) = 26;
-    command SpotlightObjects(SpotlightSelection) returns (Default) = 27;
-    /**
-     * Release all objects (that is, object received through this protocol as objectIDs), so they can be garbage collected by the ecmascript engine. Note that garbage collection is not necessarily run at this point, so the memory for the given objects might not be freed immediately. IMPORTANT: After this call, no object IDs received earlier are valid! All objects needs to be requested again.
-     */
-    command ReleaseObjects(Default) returns (Default) = 29;
-    event OnRuntimeStarted returns (RuntimeInfo) = 14;
-    event OnRuntimeStopped returns (RuntimeID) = 15;
-    event OnNewScript returns (ScriptInfo) = 16;
-    event OnThreadStarted returns (ThreadInfo) = 17;
-    event OnThreadFinished returns (ThreadResult) = 18;
-    event OnThreadStoppedAt returns (ThreadStopInfo) = 19;
-    /**
-     * This event is issued for XML events on the host, if a corresponding
-     * `AddEventHandler` has been issued earlier by the client.
-     */
-    event OnHandleEvent returns (DomEvent) = 20;
-    /**
-     * Some hosts send this event to indicate that an object was selected for
-     * debugging, e.g., if the debugger was started by right-clicking an element
-     * and clicking "inspect" in the context menu, this event will be sent
-     * right after startup. A client may safely choose to ignore this event.
-     */
-    event OnObjectSelected returns (ObjectSelection) = 21;
-    event OnParseError returns (DomParseError) = 28;
-}
-
-message DomParseError
-{
-    required uint32 runtimeID   = 1;
-    required uint32 scriptID    = 2;
-    required uint32 lineNumber  = 3;
-    /**
-     * Represents the character offset in the script where the parse error occured.
-     */
-    required uint32 offset      = 4;
-    /**
-     * Describes in what context the error occured.
-     */
-    required string context     = 5;
-    /**
-     * Contains the human-readable description of the parse error.
-     */
-    required string description = 6;
-}
-
-message Configuration
-{
-    optional bool stopAtScript            = 1 [default = true];
-    optional bool stopAtException         = 2 [default = false];
-    optional bool stopAtError             = 3 [default = false];
-    optional bool stopAtAbort             = 4 [default = false];
-    optional bool stopAtGc                = 5 [default = false];
-    optional bool stopAtDebuggerStatement = 6 [default = false];
-}
-
-message BreakpointPosition
-{
-    /**
-	 * A nonzero ID chosen by the client.
-	 */
-    required uint32 breakpointID = 1;
-    /**
-     * "line", "function", "event"
-     */
-    required string type         = 2;
-    /**
-     * Present when `type` is `"line"`
-     */
-    optional uint32 scriptID     = 3;
-    /**
-     * Present when `type` is `"line"`
-     */
-    optional uint32 lineNumber   = 4;
-    /**
-     * Present when `type` is `"event"`
-     */
-    optional string eventType    = 5;
-}
-
-message CssStyleDeclarations
-{
-    message NodeStyle
-    {
-        /**
-         * Common to all origins:
-         * - indexList
-         * - valueList
-         * - priorityList
-         * - statusList
-         *
-         * Common to AUTHOR and LOCAL
-         * - selector
-         * - specificity
-         *
-         * For AUTHOR
-         * - stylesheetID
-         * - ruleID
-         * - ruleType
-         */
-        message StyleDeclaration
-        {
-            /**
-             * 1 = USER-AGENT, 2=LOCAL, 3=AUTHOR, 4=ELEMENT
-             */
-            required uint32 origin       =  1;
-            repeated uint32 indexList    =  2;
-            repeated string valueList    =  3;
-            repeated bool   priorityList =  4;
-            repeated uint32 statusList   =  5;
-            optional string selector     =  6;
-            optional uint32 specificity  =  7;
-            optional uint32 stylesheetID =  8;
-            optional uint32 ruleID       =  9;
-            optional uint32 ruleType     = 10;
-        }
-    
-        required uint32           objectID    = 1;
-        required string           elementName = 2;
-        repeated StyleDeclaration styleList   = 3;
-    }
-
-    repeated string    computedStyleList = 1;
-    repeated NodeStyle nodeStyleList     = 2;
-}
-
-message CssIndexMap
-{
-    repeated string nameList = 1;
-}
-
-message ThreadStopInfo
-{
-    required uint32 runtimeID     = 1;
-    required uint32 threadID      = 2;
-    required uint32 scriptID      = 3;
-    required uint32 lineNumber    = 4;
-    /**
-     * One of:
-     * - `"broken"`
-     * - `"function-return"`
-     * - `"exception"`
-     * - `"debugger statement"`
-     * - `"breakpoint"`
-     * - `"unknown"`
-     *
-     * `"broken"` is sent in response to a `Break` command.
-     * `"breakpoint"` is sent when the script hits a debugger-set breakpoint.
-     */
-    required string stoppedReason = 5;
-    /**
-     * Present if and only if `stoppedReason` is `"breakpoint"`
-     */
-    optional uint32 breakpointID  = 6;
-}
-
-message ObjectSelection
-{
-    required uint32 objectID  = 1;
-    required uint32 windowID  = 2;
-    optional uint32 runtimeID = 3;
-}
-
-message ScriptInfo
-{
-    required uint32 runtimeID  = 1;
-    required uint32 scriptID   = 2;
-    /**
-     * One of:
-     * - `"inline"`
-     * - `"event"`
-     * - `"linked"`
-     * - `"timeout"`
-     * - `"java"`
-     * - `"generated"`
-     * - `"unknown"`
-     */
-    required string scriptType = 3;
-    required string scriptData = 4;
-    /**
-     * present if `scriptType` is Linked
-     */
-    optional string uri        = 5;
-}
-
-message ThreadMode
-{
-    required uint32 runtimeID = 1;
-    required uint32 threadID  = 2;
-    /**
-     * One of:
-     * - `"run"`
-     * - `"step-into-call"`
-     * - `"step-next-line"`
-     * - `"step-out-of-call"`
-     */
-    required string mode      = 3;
-}
-
-message ObjectList
-{
-    repeated ObjectInfo objectList = 1;
-}
-
-/**
- * Add an event handler. This will generate a HANDLE-EVENT event every time the XML event defined by the pair (NAMESPACE, EVENT-TYPE) reaches the object defined by OBJECT-ID in the capturing phase. XML events are defined in http://www.w3.org/TR/xml-events
- */
-message EventHandler
-{
-    /**
-     * A nonzero ID chosen by the client. The host may also use this ID to refer to the
-	 * event handler.
-     */
-    required uint32 handlerID             = 1;
-    required uint32 objectID              = 2;
-    /**
-     * Namespace of the event. If empty, it will match any namespace.
-     */
-    required string namespace             = 3;
-    required string eventType             = 4;
-    /**
-     * If `true` it prevents the default event handler from running.
-     */
-    required bool   preventDefaultHandler = 5;
-    /**
-     * If `true` it stops propagation of the event beyond this `objectID` (it will however run for all handlers on the object).
-     */
-    required bool   stopPropagation       = 6;
-}
-
-message EvalResult
-{
-    /**
-     * If it is "completed" or "unhandled-exception" then `type`, `value` and `objectValue` will be present.
-     */
-    required string      status      = 1;
-    /**
-     * One of:
-     * - `"number"`
-     * - `"boolean"`
-     * - `"string"`
-     * - `"null"`
-     * - `"undefined"`
-     * - `"object"`
-     */
-    required string      type        = 2;
-    /**
-     * Only present when `type` is `"number"`, `"string"` or `"boolean"`
-     */
-    optional string      value       = 3;
-    /**
-     * Only present when `type` is `"object"`
-     */
-    optional ObjectValue objectValue = 4;
-}
-
-message ObjectValue
-{
-    required uint32 objectID    = 1;
-    required bool   isCallable  = 2;
-    required bool   isFunction  = 3;
-    /**
-     * type, function or object
-     */
-    required string type        = 4;
-    optional uint32 prototypeID = 5;
-    /**
-     * Name of class (object) or function
-     */
-    optional string name        = 6;
-}
-
-message RuntimeList
-{
-    repeated RuntimeInfo runtimeList = 1;
-}
-
-message SpotlightObjectSelection
-{
-    /**
-     * Using `0` clears the spotlight.
-     */
-    required uint32 objectID       = 1;
-    /**
-     * Chooses whether the given object should be scrolled into view or not.
-     */
-    required bool   scrollIntoView = 2;
-}
-
-message DomTraversal
-{
-    required uint32 objectID  = 1;
-    /**
-     * traversal on off:  
-     * - `"parent-node-chain-with-children"`
-     *     take the parent node chain for the target node.
-     *     add for each node in that chain all children, 
-     *     and for all children there first child,
-     *     if that is a text node and the only node, 
-     *     starting with the document node.
-     * - `"children"`
-     *     get node data for all children in their flow
-     * - `"node"
-     *     get node data for that node
-     * - `"subtree"`
-     *     get node data for the subtree in the flow of it
-     */
-    required string traversal = 2;
-}
-
-message BreakSelection
-{
-    required uint32 runtimeID = 1;
-    required uint32 threadID  = 2;
-}
-
-/**
- * To highlight elements in the document
- */
-message SpotlightSelection
-{
-    repeated SpotlightObject spotlightObjectList = 1;
-}
-
-message CssStylesheetRules
-{
-    /**
-     * Common to FONT_FACE, PAGE and STYLE is:
-     * - indexList
-     * - valueList
-     * - priorityList
-     *
-     * Common to STYLE and PAGE is:
-     * - selectorList
-     * - specificityList
-     *
-     * Common to MEDIA and IMPORT
-     * - mediaList
-     *
-     * For MEDIA
-     * - ruleList
-     *
-     * For IMPORT
-     * - href
-     * - importStylesheetID
-     *
-     * For PAGE
-     * - pseudoClass
-     *
-     * For CHARSET
-     * - charset
-     */
-    message StylesheetRule
-    {
-        /**
-         * Type values:
-         * 0 - UNKNOWN
-         * 1 - STYLE
-         * 2 - CHARSET
-         * 3 - IMPORT
-         * 4 - MEDIA
-         * 5 - FONT_FACE
-         * 6 - PAGE
-         * 7 - NAMESPACE // Not supported
-         */
-        required uint32         type               =  1;
-        required uint32         stylesheetID       =  2;
-        required uint32         ruleID             =  3;
-        repeated uint32         indexList          =  4;
-        repeated string         valueList          =  5;
-        repeated bool           priorityList       =  6;
-        /**
-         * 0..1 for PAGE and 0..* for STYLE
-         */
-        repeated string         selectorList       =  7;
-        /**
-         * 1..1 for PAGE and 0..* for STYLE
-         */
-        repeated uint32         specificityList    =  8;
-        repeated string         mediaList          =  9;
-        repeated StylesheetRule ruleList           = 10;
-        optional string         href               = 11;
-        optional uint32         importStylesheetID = 12;
-        optional uint32         pseudoClass        = 13;
-        optional string         charset            = 14;
-    }
-
-    repeated StylesheetRule ruleList = 1;
-}
-
-message EvalData
-{
-    message Variable
-    {
-        required string name     = 1;
-        required uint32 objectID = 2;
-    }
-
-    required uint32   runtimeID    = 1;
-    /**
-     * The ID of the thread to use for executing the script data, or 0
-     * to use the global scope.
-     */
-    required uint32   threadID     = 2;
-    required uint32   frameIndex   = 3;
-    /**
-     * Represents a script to be executed.
-     */
-    required string   scriptData   = 4;
-    /**
-     * Represent variables to set.
-     */
-    repeated Variable variableList = 5;
-}
-
-message CssStylesheetSelection
-{
-    required uint32 runtimeID    = 1;
-    required uint32 stylesheetID = 2;
-}
-

services/ecmascript_logger/ecmascript_logger.proto

-syntax = scope;
-
-message Config
-{
-    optional bool reformat = 1;
-}
-
-message ScriptInfo
-{
-    /**
-     * Type of script ("inline", "linked", etc; may be "none")
-     */
-    required string context = 1;
-    /**
-     * The string `"none"` or the URL at which the script originated
-     */
-    required string url     = 2;
-    /**
-     * The source code
-     */
-    required string source  = 3;
-}
-
-
-/**
- * The `ecmascript-logger` is a noninteractive tool used to log
- * all the source code executed by Opera's ECMAScript engine.
- *
- * Requirements
- *
- * req.log-source: Log script source
- *
- * [Status: strawman requirement; author: lth]
- *
- * All scripts compiled by the engine should be captured and displayed.
- *
- * A logged script has three parts: type, url, and text.
- *
- * (req.reformatting) Make Opera reformat the source code before logging
- *
- * [Status: strawman requirement; author: lth]
- *
- * The tool should allow the user to control whether Opera reformats
- * the source code before sending it, provided the script logger is
- * the only tool trying to control that behavior.
- */
-service EcmascriptLogger
-{
-    option (cpp_hfile) = "modules/scope/src/scope_ecmascript_logger.h";
-    option (core_release) = "2.5";
-    option (version) = "2.0";
-    option (cpp_class) = OpScopeEcmascriptLogger;
- 
-    /**
-     * The tool can configure the logger by sending this command.
-     * If `reformat` is `true, source
-     * code will be reformatted before compilation (currently through an
-     * expensive process of compilation, decompilation, and recompilation of
-     * the decompiled data), and the reformatted code will be sent to the
-     * script logger tool.
-     */
-    command Configure(Config) returns (Default) = 1;
-    event OnNewScript returns (ScriptInfo) = 2;
-}
-

services/exec/exec.proto

-syntax = scope;
-
-/**
- * List all valid `Action` `name`s
- */
-message ActionInfoList
-{
-    /**
-     * Name of an action, to be used in the `Action` message.
-     */
-    message ActionInfo
-    {
-        required string name = 1;
-    }
-
-    repeated ActionInfo actionInfoList = 1;
-}
-
- 
-/**
- * The Opera Exec protocol can be used to control an Opera instance from
- * the outside, and various operations can be initiated. This
- * functionality is mainly useful for QA testing.
- *
- * Examples
- * --------
- *
- * The following example will do a spatial navigation down:
- *
- * .. code-block:: javascript
- *
- *   Exec([
- *         [
- *          ["_keydown","shift"],
- *          ["_keydown","down"],
- *          ["_keyup","down"],
- *          ["_keyup","shift"]
- *         ]
- *        ])
- *
- * The following will type the text "Hello":
- *
- * .. code-block:: javascript
- *
- *   Exec([
- *         [
- *          ["_type","Hello"]
- *         ]
- *        ])
- *
- * Take note that shift-modifier key-presses are neither generated
- * nor taken into account when processing the letters of the ``_type``
- * operation. This means that no shift key will be pressed around the `"H"`
- * in `"Hello"` above, and the text typed would still be `"Hello"` if the
- * shift key was pressed (with a ``_keydown`` operation) before the ``_type``
- * operation.
- *
- * The following will trigger an Action of "Page down":
- *
- * .. code-block:: javascript
- *
- *   Exec([
- *         [
- *          ["Page Down"]
- *         ]
- *        ])
- *
- * Error handling
- * --------------
- *
- * There are currently no error messages or other reports of a failed
- * operation.  Incorrect syntax, unknown keys, or other invalid input will
- * be silently dropped.
- */
-service Exec
-{
-    option (cpp_hfile) = "modules/scope/src/scope_exec.h";
-    option (core_release) = "2.5";
-    option (version) = "2.0";
-    option (cpp_class) = OpScopeExec;
- 
-    /**
-     * Executes a series of actions in the opera host,
-     * each action consists of a name identifying the
-     * action and optionally a value for the action.
-     * The value depends on the type of action.
-     */
-    command Exec(ActionList) returns (Default) = 1;
-    /**
-     * Request a list of valid actions.
-     */
-    command GetActionInfoList(Default) returns (ActionInfoList) = 2;
-    command SetupScreenWatcher(ScreenWatcher) returns (ScreenWatcherResult) = 3 {
-        option (cpp_response) = deferred;
-
-    };
-    /**
-     * Move mouse to the given position on the screen/window.
-     * Note that the mouse cursor is not moved visibly.
-     * 
-     * The coordinates are relative to the upper left corner of the tab
-     * (not including chrome).
-     */
-    command SendMouseAction(MouseAction) returns (Default) = 5;
-}
-
-message Area
-{
-    required int32 x = 1;
-    required int32 y = 2;
-    required int32 w = 3;
-    required int32 h = 4;
-}
-
-message ScreenWatcherResult
-{
-    message ColorMatch
-    {
-        /**
-         * The `ColorSpec.id` which matched a color
-         */
-        required uint32 id    = 1;
-        /**
-         * Number of pixels for the matching `id`
-         */
-        required uint32 count = 2;
-    }
-
-    /**
-     * The ID of the window that was triggered by a screen watch, or 0 if the screen watch failed or was cancelled
-     */
-    required uint32     windowID       = 1;
-    /**
-     * ``MD5`` sum of an image, in hexadecimal.
-     */
-    required string     md5            = 2;
-    optional bytes      png            = 3;
-    repeated ColorMatch colorMatchList = 4;
-}
-
-message MouseAction
-{
-    required uint32 windowID     = 1;
-    required int32  x            = 2;
-    required int32  y            = 3;
-    /**
-     * `buttonAction` specifies the buttons to press or release
-     * It is specifies as the sum of button actions:
-     *       1 - Button 1 down
-     *       2 - Button 1 up
-     * 
-     *       4 - Button 2 down
-     *       8 - Button 2 up
-     * 
-     *      16 - Button 3 down
-     *      32 - Button 3 up
-     * 
-     * For example, to press button 1 and release button 2, the value is 9 (1+8)
-     * 
-     * Buttons are clicked in the sequence listed above. Note that down actions are
-     * listed before up actions, thus allowing single-clicking with one command
-     * (e.g. using value 3)
-     */
-    required uint32 buttonAction = 4;
-}
-
-message ScreenWatcher
-{
-    /**
-     * Specifies a new color specification.
-     * The `id` is used when reporting back the results.
-     * You can have overlapping color specifications.
-     * Note: There can be a maximum of 16 color specifications!
-     * 
-     * Color values ranges from 0 (no color) to 255 (maximal saturation), other values are not allowed.
-     * Default (meaning field missing) is 0 for any low fields and 255 for any high fields.
-     */
-    message ColorSpec
-    {
-        required uint32 id        = 1;
-        optional uint32 redLow    = 2 [default = 0];
-        optional uint32 redHigh   = 3 [default = 255];
-        optional uint32 greenLow  = 4 [default = 0];
-        optional uint32 greenHigh = 5 [default = 255];
-        optional uint32 blueLow   = 6 [default = 0];
-        optional uint32 blueHigh  = 7 [default = 255];
-    }
-
-    /**
-     * Number of milliseconds to wait before capturing the screen area.
-     *
-     * The default is 10 seconds.
-     */
-    required uint32    timeOut       = 1 [/** 10 seconds */ default = 10000];
-    /**
-     * Define an area on the page, relative to the page (not viewport).
-     *
-     * The default area is {x=0, y=0, w=200, h=100}.
-     */
-    required Area      area          = 2;
-    /**
-     * ``MD5`` sum of an image, in hexadecimal.
-     */
-    repeated string    md5List       = 3;
-    /**
-     * The ID of the window to watch, the default (or 0) is to watch the current window
-     */
-    optional uint32    windowID      = 4 [default = 0];
-    repeated ColorSpec colorSpecList = 5;
-    /**
-     * If true then the image data will be sent in the response `WatcherResult.png`, otherwise the field will be omitted
-     * Can be used to reduce bandwith usage in applications where only hashes are needed.
-     */
-    optional bool      includeImage  = 6 [default = true];
-}
-
-message ActionList
-{
-    message Action
-    {
-        /**
-         * The name of the action to execute. 
-         * This is either a regular Opera action (e.g. "Page Down"),
-         * or a special exec-action. Both kinds can be found by 
-         * calling `GetActionInfoList`. The special cases are
-         * prefixed with underscore ("_"), and these require `value` 
-         * parameter to work, but always ignores `windowID`.
-         * 
-         * The special cases may include:
-         *     _keydown | _keyup: 
-         *         The `value` is either a key-name ("ctrl", "down", etc.)
-         *         or a single character ("a", "b", etc.)
-         *     _type: 
-         *         Types the text present in `value` 
-         *         (a different approach is the "Insert" action)
-         * 
-         * It is currently not possible to figure out which actions 
-         * take parameters (`value`), and which don't. Optimistically, 
-         * we have made the `Action` type extendable to include 
-         * such information later.
-         */
-        required string name     = 1;
-        /**
-         * Additional parameters to the action. E.g. "opera.com" to the command "go"
-         */
-        optional string value    = 2;
-        optional uint32 windowID = 3;
-    }
-
-    repeated Action actionList = 1;
-}

services/http_logger/http_logger.proto

-syntax = scope;
-
-/**
- * The `http-logger` is a noninteractive tool used to log interactions between Opera and the web servers it accesses.
- */
-service HttpLogger
-{
-    option (cpp_hfile) = "modules/scope/src/scope_http_logger.h";
-    option (core_release) = "2.5";
-    option (version) = "2.0";
-    option (cpp_class) = OpScopeHttpLogger;
- 
-    event OnRequest returns (Header) = 1;
-    /**
-     * Note: The response does not have its own id, but refers to the previous id from `OnRequest`.
-     */
-    event OnResponse returns (Header) = 2;
-}
-
-message Header
-{
-    /**
-     * An identifier for the request; it is not necessarily unique across
-     * time, as it is just the memory address of the request object.
-     */
-    required uint32 requestID = 1;
-    /**
-     * The window ID is shared across scope. Notably, it's the same as in the ecmascript debugger.
-     * INTERNAL: The value is from Window::id
-     */
-    required uint32 windowID  = 2;
-    /**
-     * Timestamp of the message, in milliseconds since `1970-01-01 00:00 UTC`
-     * (be sure not to rely on the time being correct - this is client time, and
-     * may be wildly different than the host time)
-     *
-     * Note: Float encoded as string
-     */
-    required string time      = 3;
-    /**
-     * Header of the request/response, i.e. the `HTTP` data up until the first
-     * occurence of `CR+LF+CR+LF`, inclusive.
-     */
-    required string header    = 4;
-}
-

services/probedata_server/probedata_server.proto

-syntax = scope;
-
-/**
- * The probedata server provides interactive online access to the data structures in the probetools infrastructure, if that
- * is enabled. This allows online and offline profiling tools to be written.
- *
- * Ideas for these tools include task-manager like profiling, where the tool shows where the application has spent the last
- * `n` seconds, cumulative profiling, and an interactive interface to control probetools (e.g., to clear its profiling
- * data before an experiment).
- *
- * There will be other commands soon, as this is just preliminary work. These may be commands like `profiling-data`
- * (to obtain just time profile), `profiling-snapshot` (to obtain time profile differences since last snapshot), and
- * `memory-snapshot` (to obtain a representation of the heap).
- */
-service ProbedataServer
-{
-    option (cpp_hfile) = "modules/scope/src/scope_probedata_server.h";
-    option (core_release) = "2.5";
-    option (version) = "2.0";
-    option (cpp_class) = OpScopeProbedataServer;
-
-    /**
-     * The `all-data` command retrieves the current profiling data in full exactly as it would be written to the file `opprof0.out`.</p>
-     */
-    command AllData(Default) returns (ProbeData) = 1;
-}
-
-message ProbeData
-{
-    /**
-     * The response to the `AllData` command is a single data element containing encoded binary data.
-     */
-    required bytes data = 1;
-}
-

services/scope/scope.proto

-syntax = scope;
-
-message ServiceList
-{
-    repeated string serviceList = 1;
-}
-
-/**
- * Introspection result for a given message.
- */
-message MessageInfo
-{
-    message FieldInfo
-    {
-        required string name       = 1;
-        /**
-         * The protocol buffer type for this field. The types are:
-         * 
-         * == ============================
-         * 1  Double
-         * 2  Float
-         * 3  Int32
-         * 4  Uint32
-         * 5  Sint32
-         * 6  Fixed32
-         * 7  Sfixed32
-         * 8  Bool
-         * 9  String
-         * 10 Bytes
-         * 11 Message
-         * 12 Int64 (not supported yet)
-         * 13 Uint64 (not supported yet)
-         * 14 Sint64 (not supported yet)
-         * 15 Fixed64 (not supported yet)
-         * 16 Sfixed64 (not supported yet)
-         * == ============================
-         */
-        required uint32 type       = 2;
-        /**
-         * The unique protocol buffer number for this field.
-         */
-        required uint32 number     = 3;
-        /**
-         * Specifies whether the fields is required, optional or repeated:
-         * 
-         * = ========
-         * 0 Required
-         * 1 Optional
-         * 2 Repeated
-         * = ========
-         */
-        optional uint32 quantifier = 4 [default = 0];
-        /**
-         * ID of message this field references, only set for Message fields
-         */
-        optional uint32 messageID  = 5;
-    }
-
-    required uint32    id        = 1;
-    required string    name      = 2;
-    repeated FieldInfo fieldList = 3;
-    optional uint32    parentID  = 4;
-}
-
-message EventInfo
-{
-    required string name      = 1;
-    required uint32 number    = 2;
-    required uint32 messageID = 3;
-}
-
-message Service
-{
-    required string name          = 1;
-    /**
-     * This field contains the major and minor version number of the service.
-     * The first number is the major version, the second is the minor, and any additional
-     * numbers/strings are not of relevance but can be shown to the end-user if wanted.
-     *
-     * The major version determines major changes (ie. compatibility breaks), while
-     * the minor version determines incremental changes (ie. backwards compatible).
-     * The client must check these two numbers to ensure it is able to communicate
-     * properly with the service. If the major version is different from the
-     * versions the client is compatible with, or the minor version is less than
-     * the required version, it must disconnect.
-     *
-     * Let us say a client supports version 1.6 and up and also version 2.0 and up.
-     * It would do::
-     *
-     *   if major == 1 and minor >= 6 or major == 2:
-     *     print "We support service version %d.%d" % (major, minor)
-     *   else:
-     *     print "We do not support service version %d.%d" % (major, minor)
-     */
-    required string version       = 2;
-}
-
-message HostInfo
-{
-    required uint32  stpVersion      = 1;
-    required string  coreVersion     = 2;
-    required string  platform        = 3;
-    required string  operatingSystem = 4;
-    required string  userAgent       = 5;
-    repeated Service serviceList     = 6;
-}
-
-message ClientInfo
-{
-    required string format = 1;
-}
-
-message MessageInfoList
-{
-    repeated MessageInfo messageList = 1;
-}
-
-message ServiceSelection
-{
-    required string name = 1;
-}
-
-message ServiceInfo
-{
-    repeated CommandInfo commandList = 1;
-    repeated EventInfo   eventList   = 2;
-}
-
-/**
- * This is a special service which is always present and always enabled.
- *
- * This service replaces the special commands used in STP/0 (started with an asterix).
- * The only command that is fully compatible with STP/0 is "\*services" (OnServices)
- * which is actually sent as STP/0 only, any other special command sent to scope
- * will be ignored.
- * The system takes care of mapping it to the correct format when sending and
- * receiving them. However the payload of these messages is no longer the same:
- * they must now be sent using UMS. This means using either JSON or XML when
- * sending over STP/0.
- */
-service Scope
-{
-    option (cpp_hfile) = "modules/scope/src/scope_protocol_service.h";
-    option (core_release) = "2.5";
-    option (version) = "1.0";
-    option (cpp_class) = OpScopeProtocolService;
- 
-    /**
-     * This commands is used by the client to initiate connection with the host.
-     * The command specifies the global settings for the client. Currently this
-     * means setting the format of all events for this client.
-     *
-     * Repeated use of this command will result in the host resetting any settings
-     * and services that the client used earlier.
-     *
-     * If the requested format is not allowed or does not exist, it will respond
-     * with the status `"Bad Request"` (3).
-     */
-    command Connect(ClientInfo) returns (Default) = 3;
-    /**
-     * This disconnects the client by resetting any settings and disabling any services
-     * the client used. This command is primarily meant for proxies which must be
-     * sent if a socket connection with an active client closes.
-     * If the client is able to do this, then it should send the command itself.
-     */
-    command Disconnect(Default) returns (Default) = 4;
-    /**
-     * This is used to enable a single service in the host.
-     *
-     * Errors:
-     *
-     * - If the service is not found it will return with status
-     *   `"Service Not Found"` (6).
-     * - If the service could not be enabled it will return with status
-     *   `"Service Not Enabled"` (8).
-     * - If the client tries to enable the `"scope"` service it will return with status
-     *   `"Bad Request"` (3).
-     */
-    command Enable(ServiceSelection) returns (ServiceResult) = 5;
-    /**
-     * This is used to disable a client's access to one service.
-     * Once the client has been removed the from the service it will no longer
-     * receive events from it, and it will not be able to send commands to it.
-     * The internal `"scope"` service cannot be disabled since it is always enabled.
-     *
-     * Errors:
-     * - If the service is not found it will return with a status of
-     *   `"Service Not Found"` (6).
-     * - If the service is not yet enabled it will return with a status of
-     *   `"Service Not Enabled"` (8).
-     * - If the client tries to disable the "scope" service it will return with a
-     *   status of `"Bad Request"` (3).
-     */
-    command Disable(ServiceSelection) returns (ServiceResult) = 6;
-    /**
-     * This is used to get information about one specific service.
-     *
-     * The command list contains all the commands in the service. Each command is
-     * listed with its name and the corresponding command ID (used by STP/1).
-     * The event list is similar to the command list, but is listed for the available
-     * events.
-     *
-     * Errors:
-     *
-     * - If the service is not found it will return the message with status set
-     *   to `"Service Not Found"` (6).
-     */
-    command Info(ServiceSelection) returns (ServiceInfo) = 7;
-    /**
-     * The quit message is sent to Opera when the proxy or client operation is terminated.
-     * No communication with the proxy will be possible once it has sent the quit
-     * message. When Opera receives this message it should disable all debugging
-     * services that are currently enabled. 
-     *
-     * Note: This command does not do anything, might be removed in the future.
-     */
-    command Quit(Default) returns (Default) = 8;
-    /**
-     * This commands is used to get information about the host.
-     *
-     * The command responds with information on available services, version, and
-     * other relevant information.
-     */
-    command HostInfo(Default) returns (HostInfo) = 10;
-    command MessageInfo(MessageSelection) returns (MessageInfoList) = 11;
-    /**
-     * This event is the first that is sent from the host (and proxy) and contains
-     * all the available services. It is always sent encoded as an STP/0 message.
-     */
-    event OnServices returns (ServiceList) = 0;
-    /**
-     * This event is sent by Opera to the proxy or client when Opera terminates its
-     * operation. No communication with Opera is possible once Opera has sent the
-     * event. When the proxy receives this message it broadcasts it to all of its
-     * clients.
-     */
-    event OnQuit returns (Default) = 1;
-    /**
-     * This is a special event which is used by the proxy (and not by the host) when the connection
-     * to the Opera host is unexpectedly lost, for instance if the Opera host crashes.
-     */
-    event OnConnectionLost returns (Default) = 2;
-    /**
-     * This is a generic event for sending out error messages which are not tied to a specific
-     * command.
-     */
-    event OnError returns (ErrorInfo) = 9;
-}
-
-message ErrorInfo
-{
-    required string description = 1;
-}
-
-/**
- * Selects which messages to introspect.
- */
-message MessageSelection
-{
-    /**
-     * Name of service to fetch messages from. Message ids are unique per service.
-     */
-    required string serviceName    = 1;
-    /**
-     * Contains ids of message which should be fetched.
-     */
-    repeated uint32 idList         = 2;
-    /**
-     * Set to true to automatically include messages which are referenced (fields of type Message). This makes it easy to fetch the entire message chain for a given message.
-     */
-    optional bool   includeRelated = 3;
-    /**
-     * Set to true if all message in the service should be included. Overrides includeRelated and idList.
-     */
-    optional bool   includeAll     = 4;
-}
-
-message ServiceResult
-{
-    required string name = 1;
-}
-
-message CommandInfo
-{
-    required string name       = 1;
-    required uint32 number     = 2;
-    required uint32 messageID  = 3;
-    required uint32 responseID = 4;
-}
-

services/url_player/url_player.proto

-syntax = scope;
-
-message WindowCount
-{
-    /**
-     * Signifies the number of windows to open.
-     */
-    required uint32 windowCount = 1;
-}
-
-/**
- * The URL player is a stress testing tool: is used to remotely command Opera to open new windows and load documents into those
- * windows.
- */ 
-service UrlPlayer
-{
-    option (cpp_hfile) = "modules/scope/src/urlplayer_command.h";
-    option (core_release) = "2.5";
-    option (version) = "2.0";
-    option (cpp_class) = OpScopeUrlPlayer;
-
-    /**
-     * The front end opens a number of windows under control of the URL player by issuing the `createwindows` command:
-     *
-     * This command generates an immediate response to the client (see section on replies below). A success
-     * response carries the number of windows actually created (on some platforms it may be
-     * less than requested.
-     */    
-    command CreateWindows(WindowCount) returns (WindowCount) = 1;
-    /**
-     * Loads a URL into a specific window.
-     *
-     * A success message will be sent once loading is complete. A failure message will be sent as soon as the failure is known,
-     * which means immediately in case of e.g., parse errors, and later in case it could not connect to the server.
-     *
-     * Note that even after a successful loading is signalled the page can continue loading, for example if a script adds inline
-     * elements. There is no way for the client to tell if this is happening.
-     */
-    command LoadUrl(Request) returns (Window) = 2;
-    event OnUrlLoaded returns (Window) = 3;
-    event OnConnectionFailed returns (Window) = 4;
-}
-
-message Request
-{
-    /**
-     * Signifies the zero-based ordinal of the window into which we want to load `url`.
-     */
-    required uint32 windowNumber = 1;
-    required string url          = 2;
-}
-
-message Window
-{
-    /**
-     * The window number that was the target of the LoadUrl command.
-     */
-    required uint32 windowID = 1;
-}
-

services/window_manager/window_manager.proto

-syntax = scope;
-
-/**
- * TODO: We probably want a lot more information about each window, like URL, shortcut
- *       icon, etc.
- */
-message WindowInfo
-{
-    required uint32 windowID   = 1;
-    required string title      = 2;
-    /**
-     *
-     * TODO: Some of these are obsolete, like "ad". Figure out which ones should really be present.
-     *
-     * Type is one of:
-     * - "normal"
-     * - "download"
-     * - "cache"
-     * - "plugins"
-     * - "history"
-     * - "help"
-     * - "mail_view"
-     * - "mail_compose"
-     * - "newsfeed_view"
-     * - "ad"
-     * - "im_view"
-     * - "p2p_view"
-     * - "brand_view"
-     * - "print_selection"
-     * - "js_console"
-     * - "gadget"
-     * - "controller"
-     * - "info"
-     * - "dialog"
-     * - "thumbnail"
-     */
-    required string windowType = 3;
-    /**
-     * The `window-id` of the window who opened the window in question,
-     * or 0 if it was not opened by another window.
-     */
-    required uint32 openerID   = 4;
-}
-
-/**
- * We want to be able to work with windows on a higher level than before. One important goal is to opt-in on the messages you
- * get instead of being flooded.
- *
- * Discussion
- * ----------
- *
- * This protocol will prevent a lot of flooding from the other services, but it will on the other hand flood a bit itself.
- * There is no way to stop it from sending `OnWindowActivated` messages for example.
- *
- * When Opera Dragonfly is used to debug on the desktop, it probably doesn't want to use this service at all, but just have
- * the filters automatically set to include the active window. We might cater for this later. The way to do it with the current
- * protocol would be to retrieve the active window and put that in the include filter manually. However the active window might
- * have changed by the time Opera Dragonfly gets to do that. Additionally, we would like Opera Dragonfly to start with a certain
- * DOM node selected. I see no other way than adding some C++ hooks to do this when debugging locally.
- */
-service WindowManager
-{
-    option (cpp_hfile) = "modules/scope/src/scope_window_manager.h";
-    option (core_release) = "2.5";
-    option (version) = "2.0";
-    option (cpp_class) = OpScopeWindowManager;
- 
-    /**
-     * Request the currently active window.
-     */
-    command GetActiveWindow(Default) returns (WindowID) = 1;
-    command ListWindows(Default) returns (WindowList) = 2;
-    /**
-     * The default `WindowFilter` used to be `includePatternList` `"*"`.
-     * After this command was introduced, the default filter is `includeIDList` 0 (unknown).
-     *
-     * The filtering mechanism works by taking the appropriate window-id of the message and checks it:
-     *
-     *   If the INCLUDE filter contains the window-id, or a window that has opened the window,
-     *   and the window-id is not in the EXCLUDE filter,
-     *      then send the message.
-     *   Otherwise,
-     *      discard the message
-     *
-     * `includeIDList` and `excludeIDList` appends to the existing filter. This is true whether these occur in the
-     * same `ModifyFilter` command or occur in different `ModifyFilter` commands. If the `clearFilter` flag is present, the
-     * filter will cleared before the `includeIDList` and `excludeIDList` appends to the filter.
-     *
-     * TODO: Perhaps `WindowFilter` should work on window types as well?
-     */
-    command ModifyFilter(WindowFilter) returns (Default) = 3;
-    /**
-     * Sent every time there is a new window, or some window information changed.
-     */
-    event OnWindowUpdated returns (WindowInfo) = 4;
-    /**
-     * Sent when a window is closed.
-     */
-    event OnWindowClosed returns (WindowID) = 5;
-    /**
-     * Sent whenever the active window is changed.
-     */
-    event OnWindowActivated returns (WindowID) = 6;
-    /**
-     * Sent whenever a window has finished loading. This
-     * event happens after external resources are loaded.
-     * Note: if the page uses scripting to dynamically change the page or load more data, this event may occur
-     *       multiple times for the same window. 
-     */
-    event OnWindowLoaded returns (WindowID) = 7;
-}
-
-message WindowID
-{
-    required uint32 windowID = 1;
-}
-
-message WindowFilter
-{
-    required bool   clearFilter        = 1 [default = false];
-    repeated uint32 includeIDList      = 2;
-    /**
-     * The string can currently only have one value: `"*"`, meaing all window-ids.
-     * The filter automatically includes windows that are opened from windows
-     * in the INCLUDE filter.
-     */
-    repeated string includePatternList = 3;
-    repeated uint32 excludeIDList      = 4;
-    repeated string excludePatternList = 5;
-}
-
-message WindowList
-{
-    repeated WindowInfo windowList = 1;
-}
-
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.