From e9fa287b04222deb7958cd6db7bcd26f050b18ea Mon Sep 17 00:00:00 2001 From: Isaac Murchie Date: Tue, 18 Jun 2019 15:51:35 -0400 Subject: [PATCH] Scrap the inspector --- .eslintignore | 1 - .gitignore | 4 - .travis.yml | 1 - Inspector/.eslintignore | 1 - Inspector/.eslintrc | 275 ------------------ Inspector/.flowconfig | 14 - Inspector/css/app.css | 53 ---- Inspector/css/inspector.css | 20 -- Inspector/css/screen.css | 24 -- Inspector/css/tree.css | 30 -- Inspector/index.html | 10 - Inspector/js/app.js | 94 ------ Inspector/js/gesture_recognizer.js | 94 ------ Inspector/js/http.js | 39 --- Inspector/js/image_utils.js | 50 ---- Inspector/js/inspector.js | 119 -------- Inspector/js/screen.js | 246 ---------------- Inspector/js/screenshot_factory.js | 62 ---- Inspector/js/tree.js | 127 -------- Inspector/js/tree_context.js | 22 -- Inspector/js/tree_node.js | 68 ----- Inspector/package.json | 34 --- Inspector/webpack.config.js | 42 --- README.md | 2 - Scripts/bootstrap.sh | 40 +-- WebDriverAgent.xcodeproj/project.pbxproj | 12 - .../Commands/FBInspectorCommands.h | 20 -- .../Commands/FBInspectorCommands.m | 50 ---- 28 files changed, 2 insertions(+), 1552 deletions(-) delete mode 100644 Inspector/.eslintignore delete mode 100644 Inspector/.eslintrc delete mode 100644 Inspector/.flowconfig delete mode 100644 Inspector/css/app.css delete mode 100644 Inspector/css/inspector.css delete mode 100644 Inspector/css/screen.css delete mode 100644 Inspector/css/tree.css delete mode 100644 Inspector/index.html delete mode 100644 Inspector/js/app.js delete mode 100644 Inspector/js/gesture_recognizer.js delete mode 100644 Inspector/js/http.js delete mode 100644 Inspector/js/image_utils.js delete mode 100644 Inspector/js/inspector.js delete mode 100644 Inspector/js/screen.js delete mode 100644 Inspector/js/screenshot_factory.js delete mode 100644 Inspector/js/tree.js delete mode 100644 Inspector/js/tree_context.js delete mode 100644 Inspector/js/tree_node.js delete mode 100644 Inspector/package.json delete mode 100644 Inspector/webpack.config.js delete mode 100644 WebDriverAgentLib/Commands/FBInspectorCommands.h delete mode 100644 WebDriverAgentLib/Commands/FBInspectorCommands.m diff --git a/.eslintignore b/.eslintignore index b4642d3a6..0d03e30d2 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,3 @@ -Inspector Carthage Resources coverage diff --git a/.gitignore b/.gitignore index 4ffecc93a..b0cd983a3 100644 --- a/.gitignore +++ b/.gitignore @@ -39,10 +39,6 @@ Carthage/Build Carthage/Checkouts Carthage/Cartfile.resolved -# Inspector files -Inspector/node_modules -Inspector/package-lock.json - # Resource bundle recreated on each build Resources/WebDriverAgent.bundle diff --git a/.travis.yml b/.travis.yml index 7f48c0131..1952b9097 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,6 @@ osx_image: xcode9.2 cache: directories: - Carthage - - Inspector/node_module env: global: diff --git a/Inspector/.eslintignore b/Inspector/.eslintignore deleted file mode 100644 index 7c410a2a3..000000000 --- a/Inspector/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -**/node_modules/**/.*js diff --git a/Inspector/.eslintrc b/Inspector/.eslintrc deleted file mode 100644 index d62b6bb2f..000000000 --- a/Inspector/.eslintrc +++ /dev/null @@ -1,275 +0,0 @@ -{ - "parser": "babel-eslint", - - "ecmaFeatures": { - "modules", - }, - - "env": { - "es6": true, - "jasmine": true, - }, - - "plugins": [ - "babel", - "flowtype", - "react", - ], - - // Map from global var to bool specifying if it can be redefined - "globals": { - "__BUNDLE_START_TIME__": false, - "__DEV__": true, - "__dirname": false, - "__filename": false, - "__fbBatchedBridgeConfig": false, - "alert": false, - "cancelAnimationFrame": false, - "clearImmediate": true, - "clearInterval": false, - "clearTimeout": false, - "console": false, - "document": false, - "escape": false, - "exports": false, - "global": false, - "jest": false, - "pit": false, - "Map": true, - "module": false, - "navigator": false, - "process": false, - "Promise": false, - "requestAnimationFrame": true, - "require": false, - "Set": true, - "setImmediate": true, - "setInterval": false, - "setTimeout": false, - "window": false, - "FormData": true, - "XMLHttpRequest": false, - "Image": true, - - // Flow Suppressions Types - - "$FixMe": false, - "$FlowFixMe": false, - "$FlowIssue": false, - - // Flow Special Types - - "$All": false, - "$Diff": false, - "$Either": false, - "$Enum": false, - "$Exports": false, - "$Keys": false, - "$Shape": false, - "$Subtype": false, - "$Supertype": false, - "$Tuple": false, - "Class": false, - - // Flow Core Definitions (https://fburl.com/flow-core-defs) - - "$await": false, - "ArrayBufferView": false, - "Buffer": false, - "Iterable": false, - "Iterator": false, - "IteratorResult": false, - }, - - "rules": { - "comma-dangle": [1, "always-multiline"], // disallow trailing commas in object literals - "no-cond-assign": 1, // disallow assignment in conditional expressions - "no-constant-condition": 0, // disallow use of constant expressions in conditions - "no-control-regex": 1, // disallow control characters in regular expressions - "no-debugger": 1, // disallow use of debugger - "no-dupe-keys": 2, // disallow duplicate keys when creating object literals - "no-empty": 0, // disallow empty statements - "no-empty-character-class": 1, // disallow the use of empty character classes in regular expressions - "no-ex-assign": 1, // disallow assigning to the exception in a catch block - "no-extra-boolean-cast": 1, // disallow double-negation boolean casts in a boolean context - "no-extra-semi": 1, // disallow unnecessary semicolons - "no-func-assign": 1, // disallow overwriting functions written as function declarations - "no-inner-declarations": 0, // disallow function or variable declarations in nested blocks - "no-invalid-regexp": 1, // disallow invalid regular expression strings in the RegExp constructor - "no-negated-in-lhs": 1, // disallow negation of the left operand of an in expression - "no-obj-calls": 1, // disallow the use of object properties of the global object (Math and JSON) as functions - "no-regex-spaces": 1, // disallow multiple spaces in a regular expression literal - "no-reserved-keys": 0, // disallow reserved words being used as object literal keys (off by default) - "no-sparse-arrays": 1, // disallow sparse arrays - "no-unreachable": 2, // disallow unreachable statements after a return, throw, continue, or break statement - "use-isnan": 1, // disallow comparisons with the value NaN - "valid-jsdoc": 0, // Ensure JSDoc comments are valid (off by default) - "valid-typeof": 1, // Ensure that the results of typeof are compared against a valid string - - // Best Practices - // These are rules designed to prevent you from making mistakes. They either prescribe a better way of doing something or help you avoid footguns. - - "block-scoped-var": 0, // treat var statements as if they were block scoped (off by default) - "complexity": 0, // specify the maximum cyclomatic complexity allowed in a program (off by default) - "consistent-return": 0, // require return statements to either always or never specify values - "curly": 1, // specify curly brace conventions for all control statements - "default-case": 0, // require default case in switch statements (off by default) - "dot-notation": 1, // encourages use of dot notation whenever possible - "eqeqeq": [1, "allow-null"], // require the use of === and !== - "guard-for-in": 0, // make sure for-in loops have an if statement (off by default) - "no-alert": 0, // disallow the use of alert, confirm, and prompt - "no-caller": 1, // disallow use of arguments.caller or arguments.callee - "no-div-regex": 1, // disallow division operators explicitly at beginning of regular expression (off by default) - "no-else-return": 0, // disallow else after a return in an if (off by default) - "no-eq-null": 0, // disallow comparisons to null without a type-checking operator (off by default) - "no-eval": 1, // disallow use of eval() - "no-extend-native": 1, // disallow adding to native types - "no-extra-bind": 1, // disallow unnecessary function binding - "no-fallthrough": 1, // disallow fallthrough of case statements - "no-floating-decimal": 1, // disallow the use of leading or trailing decimal points in numeric literals (off by default) - "no-implied-eval": 1, // disallow use of eval()-like methods - "no-labels": 1, // disallow use of labeled statements - "no-iterator": 1, // disallow usage of __iterator__ property - "no-lone-blocks": 1, // disallow unnecessary nested blocks - "no-loop-func": 0, // disallow creation of functions within loops - "no-multi-str": 0, // disallow use of multiline strings - "no-native-reassign": 0, // disallow reassignments of native objects - "no-new": 1, // disallow use of new operator when not part of the assignment or comparison - "no-new-func": 1, // disallow use of new operator for Function object - "no-new-wrappers": 1, // disallows creating new instances of String,Number, and Boolean - "no-octal": 1, // disallow use of octal literals - "no-octal-escape": 1, // disallow use of octal escape sequences in string literals, such as var foo = "Copyright \251"; - "no-proto": 1, // disallow usage of __proto__ property - "no-redeclare": 0, // disallow declaring the same variable more then once - "no-return-assign": 1, // disallow use of assignment in return statement - "no-script-url": 1, // disallow use of javascript: urls. - "no-self-compare": 1, // disallow comparisons where both sides are exactly the same (off by default) - "no-sequences": 1, // disallow use of comma operator - "no-unused-expressions": 0, // disallow usage of expressions in statement position - "no-void": 1, // disallow use of void operator (off by default) - "no-warning-comments": 0, // disallow usage of configurable warning terms in comments": 1, // e.g. TODO or FIXME (off by default) - "no-with": 1, // disallow use of the with statement - "radix": 1, // require use of the second argument for parseInt() (off by default) - "vars-on-top": 0, // requires to declare all vars on top of their containing scope (off by default) - "wrap-iife": 0, // require immediate function invocation to be wrapped in parentheses (off by default) - "yoda": 1, // require or disallow Yoda conditions - - // Strict Mode - // These rules relate to using strict mode. - - "strict": 0, // require or disallow the "use strict" pragma in the global scope (off by default in the node environment) - - // Variables - // These rules have to do with variable declarations. - - "prefer-const": [1, {"destructuring": "all"}], // flags variables that are declared using let keyword, but never reassigned after the initial assignment - "no-catch-shadow": 1, // disallow the catch clause parameter name being the same as a variable in the outer scope (off by default in the node environment) - "no-delete-var": 1, // disallow deletion of variables - "no-label-var": 1, // disallow labels that share a name with a variable - "no-shadow": 1, // disallow declaration of variables already declared in the outer scope - "no-shadow-restricted-names": 1, // disallow shadowing of names such as arguments - "no-undef": 2, // disallow use of undeclared variables unless mentioned in a /*global */ block. - "no-undefined": 0, // disallow use of undefined variable (off by default) - "no-undef-init": 1, // disallow use of undefined when initializing variables - "no-unused-vars": [1, {"vars": "all", "args": "none"}], // disallow declaration of variables that are not used in the code - "no-use-before-define": 0, // disallow use of variables before they are defined - - // Node.js - // These rules are specific to JavaScript running on Node.js. - - "handle-callback-err": 1, // enforces error handling in callbacks (off by default) (on by default in the node environment) - "no-mixed-requires": 1, // disallow mixing regular variable and require declarations (off by default) (on by default in the node environment) - "no-new-require": 1, // disallow use of new operator with the require function (off by default) (on by default in the node environment) - "no-path-concat": 1, // disallow string concatenation with __dirname and __filename (off by default) (on by default in the node environment) - "no-process-exit": 0, // disallow process.exit() (on by default in the node environment) - "no-restricted-modules": 1, // restrict usage of specified node modules (off by default) - "no-sync": 0, // disallow use of synchronous methods (off by default) - - // Stylistic Issues - // These rules are purely matters of style and are quite subjective. - - "key-spacing": 0, - "comma-spacing": 0, - "no-multi-spaces": 0, - "brace-style": 0, // enforce one true brace style (off by default) - "camelcase": 0, // require camel case names - "consistent-this": 1, // enforces consistent naming when capturing the current execution context (off by default) - "eol-last": 1, // enforce newline at the end of file, with no multiple empty lines - "func-names": 0, // require function expressions to have a name (off by default) - "func-style": 0, // enforces use of function declarations or expressions (off by default) - "jsx-quotes": [1, "prefer-double"], // enforces the usage of double quotes for all JSX attribute values which doesn’t contain a double quote - "keyword-spacing": 1, // enforce consistency of spacing around keywords and keyword-like tokens - "new-cap": 0, // require a capital letter for constructors - "new-parens": 1, // disallow the omission of parentheses when invoking a constructor with no arguments - "no-nested-ternary": 0, // disallow nested ternary expressions (off by default) - "no-array-constructor": 1, // disallow use of the Array constructor - "no-lonely-if": 0, // disallow if as the only statement in an else block (off by default) - "no-new-object": 1, // disallow use of the Object constructor - "no-spaced-func": 1, // disallow space between function identifier and application - "semi-spacing": 1, // disallow space before semicolon - "no-ternary": 0, // disallow the use of ternary operators (off by default) - "no-trailing-spaces": 1, // disallow trailing whitespace at the end of lines - "no-underscore-dangle": 0, // disallow dangling underscores in identifiers - "no-extra-parens": 0, // disallow wrapping of non-IIFE statements in parens - "no-mixed-spaces-and-tabs": 1, // disallow mixed spaces and tabs for indentation - "quotes": [1, "single", "avoid-escape"], // specify whether double or single quotes should be used - "quote-props": 0, // require quotes around object literal property names (off by default) - "semi": 1, // require or disallow use of semicolons instead of ASI - "sort-vars": 0, // sort variables within the same declaration block (off by default) - "sort-imports": 0, // sort imports alphabetically (off by default) - "space-in-brackets": 0, // require or disallow spaces inside brackets (off by default) - "space-in-parens": 0, // require or disallow spaces inside parentheses (off by default) - "space-infix-ops": 1, // require spaces around operators - "space-unary-ops": [1, { "words": true, "nonwords": false }], // require or disallow spaces before/after unary operators (words on by default, nonwords off by default) - "max-nested-callbacks": 0, // specify the maximum depth callbacks can be nested (off by default) - "one-var": 0, // allow just one var statement per function (off by default) - "wrap-regex": 0, // require regex literals to be wrapped in parentheses (off by default) - - // Legacy - // The following rules are included for compatibility with JSHint and JSLint. While the names of the rules may not match up with the JSHint/JSLint counterpart, the functionality is the same. - - "max-depth": 0, // specify the maximum depth that blocks can be nested (off by default) - "max-len": 0, // specify the maximum length of a line in your program (off by default) - "max-params": 0, // limits the number of parameters that can be used in the function declaration. (off by default) - "max-statements": 0, // specify the maximum number of statement allowed in a function (off by default) - "no-bitwise": 1, // disallow use of bitwise operators (off by default) - "no-plusplus": 0, // disallow use of unary operators, ++ and -- (off by default) - - // Babel Plugin - // The following rules are made available via `eslint-plugin-babel`. - - "babel/generator-star-spacing": 0, - "babel/new-cap": 0, - "babel/array-bracket-spacing": 0, - "babel/object-curly-spacing": 0, - "babel/object-shorthand": 0, - "babel/arrow-parens": 0, - "babel/no-await-in-loop": 0, - - // Flow Plugin - // The following rules are made available via `eslint-plugin-flowtype`. - - "flowtype/define-flow-type": 1, - "flowtype/use-flow-type": 1, - - // React Plugin - // The following rules are made available via `eslint-plugin-react`. - - "react/display-name": 0, - "react/jsx-boolean-value": 0, - "react/jsx-no-duplicate-props": 2, - "react/jsx-no-undef": 1, - "react/jsx-sort-props": 0, - "react/jsx-uses-react": 1, - "react/jsx-uses-vars": 1, - "react/no-did-mount-set-state": 1, - "react/no-did-update-set-state": 1, - "react/no-multi-comp": 0, - "react/no-string-refs": 1, - "react/no-unknown-property": 0, - "react/prop-types": 0, - "react/react-in-jsx-scope": 1, - "react/self-closing-comp": 1, - "react/wrap-multilines": 0, - } -} diff --git a/Inspector/.flowconfig b/Inspector/.flowconfig deleted file mode 100644 index e791cdafe..000000000 --- a/Inspector/.flowconfig +++ /dev/null @@ -1,14 +0,0 @@ -[ignore] -.*node_modules/fbjs/.* - -[include] - -[libs] - -[options] -suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe -esproposal.class_static_fields=enable - -[version] -^0.73.0 diff --git a/Inspector/css/app.css b/Inspector/css/app.css deleted file mode 100644 index 7989bab66..000000000 --- a/Inspector/css/app.css +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -html, body, #app { - font-family: sans-serif; - width: 100%; - height: 100%; - margin: 0px; - padding: 0px; -} - -.section { - position: absolute; - width: 33%; - height: 100%; - padding: 0px; - border: 1px solid #D5DCDE; - border-right: 0; -} - -.section.first { -} - -.section.second { - margin-left: 33%; -} - -.section.third { - margin-left: 66%; -} - -.section-caption { - display: block; - text-align: center; - padding: 20px; - font-size: 200%; - font-weight: bold; - border-bottom: 1px solid #D5DCDE; -} - -.section-content-container { - padding: 10px; - padding-top: 25px; -} - -.section-content { -} diff --git a/Inspector/css/inspector.css b/Inspector/css/inspector.css deleted file mode 100644 index 5effebe36..000000000 --- a/Inspector/css/inspector.css +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -.inspector-field { - margin-bottom: 5px; -} - -.inspector-field-caption { - font-weight: bold; -} - -.inspector-field-value { - font-family: monospace; -} diff --git a/Inspector/css/screen.css b/Inspector/css/screen.css deleted file mode 100644 index 51639ccb5..000000000 --- a/Inspector/css/screen.css +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -.screen-screenshot-container { - border: 1px solid #D5DCDE; - margin: 0 auto; - padding: 0px; -} - -.screen-screenshot { - position: relative; -} - -.screen-highlighted-node { - position: relative; - background: #FBB2C2; - opacity: 0.8; -} diff --git a/Inspector/css/tree.css b/Inspector/css/tree.css deleted file mode 100644 index 4f772b805..000000000 --- a/Inspector/css/tree.css +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -.section.second .section-content-container { - padding-top: 0px; -} - -.tree-container { - overflow-y: auto; - max-height: 600px; -} - -.tree-header { - height: 25px; -} - -.tree-node { - font-family: monospace; - cursor: pointer; -} - -.tree-node.selected { - background-color: #D690A0; -} diff --git a/Inspector/index.html b/Inspector/index.html deleted file mode 100644 index b6cf9a609..000000000 --- a/Inspector/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - WebDriverAgent Inspector - - - - - diff --git a/Inspector/js/app.js b/Inspector/js/app.js deleted file mode 100644 index 575a44271..000000000 --- a/Inspector/js/app.js +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -import React from 'react'; -import ReactDOM from 'react-dom'; - -import HTTP from 'js/http'; -import Screen from 'js/screen'; -import ScreenshotFactory from 'js/screenshot_factory'; -import Tree from 'js/tree'; -import TreeNode from 'js/tree_node'; -import TreeContext from 'js/tree_context'; -import Inspector from 'js/inspector'; - -require('css/app.css'); - -const SCREENSHOT_ENDPOINT = 'screenshot'; -const TREE_ENDPOINT = 'source?format=json'; -const ORIENTATION_ENDPOINT = 'orientation'; - -class App extends React.Component { - constructor(props) { - super(props); - this.state = {}; - } - - refreshApp() { - this.fetchScreenshot(); - this.fetchTree(); - } - - componentDidMount() { - this.refreshApp(); - } - - fetchScreenshot() { - HTTP.get(ORIENTATION_ENDPOINT, (orientation) => { - orientation = orientation.value; - HTTP.get(SCREENSHOT_ENDPOINT, (base64EncodedImage) => { - base64EncodedImage = base64EncodedImage.value; - ScreenshotFactory.createScreenshot(orientation, base64EncodedImage, (screenshot) => { - this.setState({ - screenshot: screenshot, - }); - }); - }); - }); - } - - fetchTree() { - HTTP.get(TREE_ENDPOINT, (treeInfo) => { - treeInfo = treeInfo.value; - this.setState({ - rootNode: TreeNode.buildNode(treeInfo, new TreeContext()), - }); - }); - } - - render() { - return ( -
- { this.refreshApp(); }} /> - { - this.setState({ - highlightedNode: node, - }); - }} - onSelectedNodeChange={(node) => { - this.setState({ - selectedNode: node, - }); - }} - rootNode={this.state.rootNode} - selectedNode={this.state.selectedNode} /> - { this.refreshApp(); }} /> -
- ); - } -} - -ReactDOM.render(, document.body); diff --git a/Inspector/js/gesture_recognizer.js b/Inspector/js/gesture_recognizer.js deleted file mode 100644 index e6e9f89ae..000000000 --- a/Inspector/js/gesture_recognizer.js +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -const IDLE = 'idle'; -const MOUSE_DOWN = 'mouse_down'; -const DRAGGING = 'dragging'; - -class GestureRecognizer { - - constructor(params) { - this._onClick = params.onClick; - this._onDrag = params.onDrag; - this._onKeyDown = params.onKeyDown; - this._state = { - value: IDLE, - params: {}, - }; - } - - onMouseDown(ev) { - this._state = { - value: MOUSE_DOWN, - params: { - origin: { - coords: { - x: ev.pageX, - y: ev.pageY, - }, - timestamp: Date.now(), - }, - }, - }; - } - - onMouseMove(ev) { - if (this._state.value === MOUSE_DOWN) { - this._state.value = DRAGGING; - } - } - - onMouseUp(ev) { - this._state.params.end = { - coords: { - x: ev.pageX, - y: ev.pageY, - }, - timestamp: Date.now(), - }; - if (this._state.value === MOUSE_DOWN) { - this._triggerClick(); - } else if (this._state.value === DRAGGING) { - this._triggerDrag(); - } - this._state = { - value: IDLE, - params: {}, - }; - } - - onKeyDown(ev) { - if (ev.target !== document.body) { - return; - } - var key = ev.key; - if (key === 'Backspace') { - this._onKeyDown('\u007F'); - } else if (key === 'Enter') { - this._onKeyDown('\u000d'); - } else if (key && key.length === 1) { - this._onKeyDown(key); - } - } - - _triggerClick() { - this._onClick(this._state.params.origin.coords); - } - - _triggerDrag() { - const duration = this._state.params.end.timestamp - this._state.params.origin.timestamp; - this._onDrag({ - origin: this._state.params.origin.coords, - end: this._state.params.end.coords, - duration: duration / 1000, - }); - } -} - -module.exports = GestureRecognizer; diff --git a/Inspector/js/http.js b/Inspector/js/http.js deleted file mode 100644 index 18f4287a7..000000000 --- a/Inspector/js/http.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -import Ajax from 'simple-ajax'; - -class Http { - static get(path, callback) { - const ajax = new Ajax({ - url: path, - method: 'GET', - }); - ajax.on('success', event => { - var response = JSON.parse(event.target.responseText); - callback(response); - }); - ajax.send(); - } - - static post(path, data, callback) { - const ajax = new Ajax({ - url: path, - method: 'POST', - data: data, - }); - ajax.on('success', event => { - var response = JSON.parse(event.target.responseText); - callback(response); - }); - ajax.send(); - } -} - -module.exports = Http; diff --git a/Inspector/js/image_utils.js b/Inspector/js/image_utils.js deleted file mode 100644 index 92f12c5e3..000000000 --- a/Inspector/js/image_utils.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -class ImageUtils { - static decodeBase64EncodedImage(base64EncodedImage, callback) { - this._createImage('data:image/png;base64,' + base64EncodedImage, callback); - } - - static rotateFromLandscapeOrientation(imageInLanscapeOrientation, callback) { - var canvas = document.createElement('canvas'); - canvas.width = imageInLanscapeOrientation.height; - canvas.height = imageInLanscapeOrientation.width; - - var context = canvas.getContext('2d'); - context.rotate(-90 * (Math.PI / 180)); - context.translate(-imageInLanscapeOrientation.width, 0); - context.drawImage(imageInLanscapeOrientation, 0, 0); - - this._createImage(canvas.toDataURL(), callback); - } - - static rotateFromLandscapeRightOrientation(imageInLanscapeRightOrientation, callback) { - var canvas = document.createElement('canvas'); - canvas.width = imageInLanscapeRightOrientation.height; - canvas.height = imageInLanscapeRightOrientation.width; - - var context = canvas.getContext('2d'); - context.rotate(90 * (Math.PI / 180)); - context.translate(0, -imageInLanscapeRightOrientation.height); - context.drawImage(imageInLanscapeRightOrientation, 0, 0); - - this._createImage(canvas.toDataURL(), callback); - } - - static _createImage(source, callback) { - var image = new Image(); - image.src = source; - image.onload = function() { - callback(image); - }; - } -} - -module.exports = ImageUtils; diff --git a/Inspector/js/inspector.js b/Inspector/js/inspector.js deleted file mode 100644 index 4896bf9f2..000000000 --- a/Inspector/js/inspector.js +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -import PropTypes from 'prop-types'; -import React from 'react'; - -import HTTP from 'js/http'; -var Button = require('react-button'); - -require('css/inspector.css'); - -function boolToString(boolValue) { - return boolValue === '1' ? 'Yes' : 'No'; -} - -class Inspector extends React.Component { - render() { - return ( -
-
- Inspector -
-
-
- {this.renderInspector()} -
-
-
- ); - } - - renderInspector() { - if (this.props.selectedNode == null) { - return null; - } - - const attributes = this.props.selectedNode.attributes; - const tapButton = - ; - - return ( -
- {this.renderField('Class', attributes.type)} - {this.renderField('Raw identifier', attributes.rawIdentifier)} - {this.renderField('Name', attributes.name)} - {this.renderField('Value', attributes.value)} - {this.renderField('Label', attributes.label)} - {this.renderField('Rect', attributes.rect)} - {this.renderField('isEnabled', boolToString(attributes.isEnabled))} - {this.renderField('isVisible', boolToString(attributes.isVisible))} - {this.renderField('isFocused', typeof attributes.isFocused === 'undefined' ? null : boolToString(attributes.isFocused))} - {this.renderField('Tap', tapButton, false)} -
- ); - } - - renderField(fieldName, fieldValue, castToString = true) { - if (fieldValue == null) { - return null; - } - var value; - if (castToString) { - value = String(fieldValue); - } else { - value = fieldValue; - } - return ( -
-
- {fieldName}: -
-
- {value} -
-
- ); - } - - tap(node) { - HTTP.get( - 'status', (status_result) => { - var session_id = status_result.sessionId; - HTTP.post( - 'session/' + session_id + '/elements', - JSON.stringify({ - 'using': 'link text', - 'value': 'label=' + node.attributes.label, - }), - (elements_result) => { - var elements = elements_result.value; - var element_id = elements[0].ELEMENT; - - HTTP.post( - 'session/' + session_id + '/element/' + element_id + '/click', - JSON.stringify({}), - (result) => { - this.props.refreshApp(); - }, - ); - }, - ); - }, - ); - } -} - -Inspector.propTypes = { - selectedNode: PropTypes.object, -}; - -module.exports = Inspector; diff --git a/Inspector/js/screen.js b/Inspector/js/screen.js deleted file mode 100644 index 43972e59c..000000000 --- a/Inspector/js/screen.js +++ /dev/null @@ -1,246 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -import PropTypes from 'prop-types'; -import React from 'react'; - -import HTTP from 'js/http'; -import GestureRecognizer from 'js/gesture_recognizer'; - -var Button = require('react-button'); - -require('css/screen.css'); - -class Screen extends React.Component { - componentWillMount() { - document.addEventListener('keydown', this.onKeyDown.bind(this), false); - } - - componentWillUnmount() { - document.removeEventListener('keydown', this.onKeyDown.bind(this), false); - } - - render() { - return ( -
-
- Screen -
-
- - -
-
-
- {this.renderScreenshot()} - {this.renderHighlightedNode()} -
-
-
- ); - } - - gestureRecognizer() { - if (!this._gestureRecognizer) { - this._gestureRecognizer = new GestureRecognizer({ - onClick: (ev) => { - this.onScreenShotClick(ev); - }, - onDrag: (params) => { - this.onScreenShotDrag(params); - }, - onKeyDown: (key) => { - this.onScreenShotKeyDown(key); - }, - }); - } - return this._gestureRecognizer; - } - - styleWithScreenSize() { - var screenshot = this.screenshot(); - return { - width: screenshot.width * screenshot.scale, - height: screenshot.height * screenshot.scale, - }; - } - - screenshot() { - return this.props.screenshot ? this.props.screenshot : {}; - } - - onScreenShotDrag(params) { - var fromX = params.origin.x - document.getElementById('screenshot').offsetLeft; - var fromY = params.origin.y - document.getElementById('screenshot').offsetTop; - var toX = params.end.x - document.getElementById('screenshot').offsetLeft; - var toY = params.end.y - document.getElementById('screenshot').offsetTop; - - fromX = this.scaleCoord(fromX); - fromY = this.scaleCoord(fromY); - toX = this.scaleCoord(toX); - toY = this.scaleCoord(toY); - - HTTP.get( - 'status', (status_result) => { - var session_id = status_result.sessionId; - HTTP.post( - 'session/' + session_id + '/wda/element/0/dragfromtoforduration', - JSON.stringify({ - 'fromX': fromX, - 'fromY': fromY, - 'toX': toX, - 'toY': toY, - 'duration': params.duration, - }), - (tap_result) => { - this.props.refreshApp(); - }, - ); - }, - ); - } - - scaleCoord(coord) { - var screenshot = this.screenshot(); - var pxPtScale = screenshot.width / this.props.rootNode.rect.size.width; - return coord / screenshot.scale / pxPtScale; - } - - onScreenShotClick(point) { - var x = point.x - document.getElementById('screenshot').offsetLeft; - var y = point.y - document.getElementById('screenshot').offsetTop; - x = this.scaleCoord(x); - y = this.scaleCoord(y); - - HTTP.get( - 'status', (status_result) => { - var session_id = status_result.sessionId; - HTTP.post( - 'session/' + session_id + '/wda/tap/0', - JSON.stringify({ - 'x': x, - 'y': y, - }), - (tap_result) => { - this.props.refreshApp(); - }, - ); - }, - ); - } - - onScreenShotKeyDown(key) { - HTTP.get( - 'status', (status_result) => { - var session_id = status_result.sessionId; - HTTP.post( - 'session/' + session_id + '/wda/keys', - JSON.stringify({ - 'value': [key], - }), - (tap_result) => { - this.props.refreshApp(); - }, - ); - }, - ); - } - - onMouseDown(ev) { - this.gestureRecognizer().onMouseDown(ev); - } - - onMouseMove(ev) { - this.gestureRecognizer().onMouseMove(ev); - } - - onMouseUp(ev) { - this.gestureRecognizer().onMouseUp(ev); - } - - onKeyDown(ev) { - this.gestureRecognizer().onKeyDown(ev); - } - - home(ev) { - HTTP.post( - '/wda/homescreen', - JSON.stringify({}), - (result) => { - this.props.refreshApp(); - }, - ); - } - - renderScreenshot() { - return ( - this.onMouseDown(ev)} - onMouseMove={(ev) => this.onMouseMove(ev)} - onMouseUp={(ev) => this.onMouseUp(ev)} - draggable="false" - id="screenshot" - /> - ); - } - - - renderHighlightedNode() { - if (this.props.highlightedNode == null) { - return null; - } - - const rect = this.props.highlightedNode.rect; - return ( -
- ); - } - - styleForHighlightedNodeWithRect(rect) { - var screenshot = this.screenshot(); - - const elementsMargins = 4; - const topOffset = screenshot.height; - - var scale = screenshot.scale; - // Rect attribute use pt, but screenshot use px. - // So caculate its px/pt scale automatically. - var pxPtScale = screenshot.width / this.props.rootNode.rect.size.width; - - // hide nodes with rect out of bound - if (rect.origin.x < 0 || rect.origin.x * pxPtScale >= screenshot.width || - rect.origin.y < 0 || rect.origin.y * pxPtScale >= screenshot.height){ - return {}; - } - - return { - left: rect.origin.x * scale * pxPtScale, - top: rect.origin.y * scale * pxPtScale - topOffset * scale - elementsMargins, - width: rect.size.width * scale * pxPtScale, - height: rect.size.height * scale * pxPtScale, - }; - } -} - -Screen.propTypes = { - highlightedNode: PropTypes.object, - screenshot: PropTypes.object, -}; - -module.exports = Screen; diff --git a/Inspector/js/screenshot_factory.js b/Inspector/js/screenshot_factory.js deleted file mode 100644 index 2c0415df8..000000000 --- a/Inspector/js/screenshot_factory.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -import ImageUtils from 'js/image_utils'; - -function computePrefferdScale(screenshotWidth, screenshotHeight) { - var widthOfOneColumn = (window.outerWidth / 3); - var leftRightPadding = 40; - var innerWidthOfOneColumn = widthOfOneColumn - leftRightPadding; - - var topBottomPadding = 280; - var innerHeightOfOneColumn = window.outerHeight - topBottomPadding; - return Math.min(innerWidthOfOneColumn / screenshotWidth, innerHeightOfOneColumn / screenshotHeight); -} - -class ScreenshotFactory { - static createScreenshot(orientation, base64EncodedImage, callback) { - ImageUtils.decodeBase64EncodedImage(base64EncodedImage, (decodedImage) => { - if (this._shouldRotateImage(orientation)) { - this._rotateImage(orientation, decodedImage, callback); - } else { - this._invokeCallbackWithImage(decodedImage, callback); - } - }); - } - - static _shouldRotateImage(orientation) { - return ((orientation === 'LANDSCAPE') || (orientation === 'UIA_DEVICE_ORIENTATION_LANDSCAPERIGHT')); - } - - static _rotateImage(orientation, image, callback) { - if (orientation === 'LANDSCAPE') { - ImageUtils.rotateFromLandscapeOrientation(image, (rotatedImage) => { - this._invokeCallbackWithImage(rotatedImage, callback); - }); - } else if (orientation === 'UIA_DEVICE_ORIENTATION_LANDSCAPERIGHT') { - ImageUtils.rotateFromLandscapeRightOrientation(image, (rotatedImage) => { - this._invokeCallbackWithImage(rotatedImage, callback); - }); - } else { - throw 'Unsupported orientation : ' + orientation; - } - } - - static _invokeCallbackWithImage(image, callback) { - var screenshot = { - source: image.src, - width: image.width, - height: image.height, - scale: computePrefferdScale(image.width, image.height), - }; - callback(screenshot); - } -} - -module.exports = ScreenshotFactory; diff --git a/Inspector/js/tree.js b/Inspector/js/tree.js deleted file mode 100644 index 1779b61a8..000000000 --- a/Inspector/js/tree.js +++ /dev/null @@ -1,127 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -import PropTypes from 'prop-types'; -import React from 'react'; -import TreeView from 'react-treeview'; - -import classNames from 'classnames'; - -require('css/tree.css'); -require('react-treeview/react-treeview.css'); - -const CAPTION_HEIGHT = 100; -const CAPTION_PADDING = 20; - -class Tree extends React.Component { - render() { - const style = this.styleWithMaxHeight( - this.maxTreeHeight()); - return ( -
-
- Tree of Elements -
-
-
-
- {this.renderTree()} -
-
-
-
- ); - } - - maxTreeHeight() { - return window.innerHeight - CAPTION_HEIGHT + CAPTION_PADDING; - } - - styleWithMaxHeight(height) { - return { - 'maxHeight': height, - }; - } - - renderTree() { - if (this.props.rootNode == null) { - return null; - } - return ( -
-
- {this.renderNode(this.props.rootNode)} -
- ); - } - - renderNode(node) { - const isSelected = (this.props.selectedNode != null - && this.props.selectedNode.key === node.key); - const className = classNames( - 'tree-node', - { - 'selected' : isSelected, - } - ); - - const nodeLabelView = ( - this.onNodeClick(node)} - onMouseEnter={(event) => this.onNodeMouseEnter(node)} - onMouseLeave={(event) => this.onNodeMouseLeave(node)}> - {node.name} - - ); - - var childrenViews = null; - if (node.children != null) { - childrenViews = node.children.map((child) => { - return this.renderNode(child); - }); - } - - return ( - - {childrenViews} - - ); - } - - onNodeClick(node) { - if (this.props.onSelectedNodeChange != null) { - this.props.onSelectedNodeChange(node); - } - } - - onNodeMouseEnter(node) { - if (this.props.onHighlightedNodeChange != null) { - this.props.onHighlightedNodeChange(node); - } - } - - onNodeMouseLeave(node) { - if (this.props.onHighlightedNodeChange != null) { - this.props.onHighlightedNodeChange(null); - } - } -} - -Tree.propTypes = { - onSelectedNodeChange: PropTypes.func, - onHighlightedNodeChange: PropTypes.func, - rootNode: PropTypes.object, - selectedNode: PropTypes.object, -}; - -module.exports = Tree; diff --git a/Inspector/js/tree_context.js b/Inspector/js/tree_context.js deleted file mode 100644 index e94be8def..000000000 --- a/Inspector/js/tree_context.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -class TreeContext { - constructor() { - this.baseKey = Math.random(); - this.numberOfNodes = 0; - } - - buildUniqueNodeKey() { - this.numberOfNodes++; - return this.baseKey + '|' + this.numberOfNodes; - } -} - -module.exports = TreeContext; diff --git a/Inspector/js/tree_node.js b/Inspector/js/tree_node.js deleted file mode 100644 index 2469c5f11..000000000 --- a/Inspector/js/tree_node.js +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -class TreeNode { - static buildNode(node, context) { - const key = context.buildUniqueNodeKey(); - const name = TreeNode.buildFullName(node); - const children = TreeNode.buildChildren(node, context); - return new TreeNode(key, name, children, node); - } - - static buildFullName(node) { - var fullName = '[' + node.type + ']'; - if (node.name != null) { - fullName += ' - ' + node.name; - } - return fullName; - } - - static buildChildren(node, context) { - var children = null; - if (node.children != null) { - children = node.children.map((child) => { - return TreeNode.buildNode(child, context); - }); - } - return children; - } - - static buildRect(rect) { - return { - origin: { - x: rect.x, - y: rect.y, - }, - size: { - height: rect.height, - width: rect.width, - }, - }; - } - - constructor(key, name, children, node) { - this.key = key; - this.name = name; - this.children = children; - this.rect = TreeNode.buildRect(node.rect); - this.attributes = { - type: node.type, - rawIdentifier: node.rawIdentifier, - name: node.name, - value: node.value, - label: node.label, - rect: node.frame, - isEnabled: node.isEnabled, - isVisible: node.isVisible, - isFocused: node.isFocused, - }; - } -} - -module.exports = TreeNode; diff --git a/Inspector/package.json b/Inspector/package.json deleted file mode 100644 index ddcfc5fc8..000000000 --- a/Inspector/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "web-driver-inspector", - "version": "1.0.0", - "description": "React based web inspector to inspect current device state", - "main": "index.html", - "author": "Facebook, Inc.", - "license": "ISC", - "dependencies": { - "babel-core": "^5.8.23", - "babel-loader": "^5.3.2", - "classnames": "^2.1.3", - "css-loader": "^0.16.0", - "prop-types": "^15.5.8", - "react": "15.6.1", - "react-button": "^1.2.1", - "react-dom": "^15.6.1", - "react-treeview": "^0.4.0", - "simple-ajax": "^2.1.0", - "style-loader": "^0.12.3", - "webpack": "^1.12.0" - }, - "devDependencies": { - "babel-eslint": "^7.1.1", - "eslint": "^3.13.1", - "eslint-plugin-babel": "^4.0.1", - "eslint-plugin-flowtype": "^2.30.0", - "eslint-plugin-react": "^6.9.0", - "webpack-dev-server": "^1.10.1" - }, - "scripts": { - "start": "webpack-dev-server --hot --progress --colors", - "build": "webpack --progress --colors" - } -} diff --git a/Inspector/webpack.config.js b/Inspector/webpack.config.js deleted file mode 100644 index f34378b6f..000000000 --- a/Inspector/webpack.config.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -var fs = require('fs'); -var path = require('path'); -var webpack = require('webpack'); - -function buildOutputDir() { - return (process.env.BUILD_OUTPUT_DIR != null ? process.env.BUILD_OUTPUT_DIR : __dirname); -} - -module.exports = { - entry: [ - "./js/app.js" - ], - output: { - path: buildOutputDir(), - filename: "inspector.js" - }, - module: { - loaders: [ - { test: /\.js?$/, loaders: ['babel-loader'], exclude: /node_modules/ }, - { test: /\.css?$/, loader: 'style-loader!css-loader' }, - ] - }, - resolve: { - root: path.resolve(__dirname, ''), - fallback: path.resolve(fs.realpathSync(__dirname), 'node_modules'), - }, - resolveLoader: { - modulesDirectories: [path.resolve(fs.realpathSync(__dirname), 'node_modules')], - }, - plugins: [ - new webpack.NoErrorsPlugin() - ] -}; diff --git a/README.md b/README.md index 7415d8699..3bd36c718 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ WebDriverAgent is a [WebDriver server](https://w3c.github.io/webdriver/webdriver * Implements most of [WebDriver Spec](https://w3c.github.io/webdriver/webdriver-spec.html) * Implements part of [Mobile JSON Wire Protocol Spec](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md) * [USB support](https://github.com/facebook/WebDriverAgent/wiki/USB-support) for devices - * Inspector [endpoint](http://localhost:8100/inspector) with friendly user interface to inspect current device state * Easy development cycle as it can be launched & debugged directly via Xcode * Unsupported yet, but works with tvOS & OSX @@ -20,7 +19,6 @@ To get the project set up just run bootstrap script: ``` It will: * fetch all dependencies with [Carthage](https://github.com/Carthage/Carthage) -* build Inspector bundle using [npm](https://www.npmjs.com) After it is finished you can simply open `WebDriverAgent.xcodeproj` and start `WebDriverAgentRunner` test and start sending [requests](https://github.com/facebook/WebDriverAgent/wiki/Queries). diff --git a/Scripts/bootstrap.sh b/Scripts/bootstrap.sh index e55ba2adf..c131013d3 100755 --- a/Scripts/bootstrap.sh +++ b/Scripts/bootstrap.sh @@ -36,7 +36,6 @@ function assert_has_npm() { function print_usage() { echo "Usage:" - echo $'\t -i Build Inspector bundle' echo $'\t -d Fetch & build dependencies' echo $'\t -D Fetch & build dependencies using SSH for downloading GitHub repositories' echo $'\t -h print this help' @@ -64,36 +63,10 @@ function fetch_and_build_dependencies() { } -function build_inspector() { - echo -e "${BOLD}Building Inspector" - assert_has_npm - CURRENT_DIR=$(pwd) - RESOURCE_BUNDLE_DIR="$CURRENT_DIR/Resources/WebDriverAgent.bundle" - INSPECTOR_DIR="$CURRENT_DIR/Inspector" +FETCH_DEPS=1 - echo "Creating bundle directory..." - if [[ -e "$RESOURCE_BUNDLE_DIR" ]]; then - rm -R "$RESOURCE_BUNDLE_DIR"; - fi - mkdir -p "$RESOURCE_BUNDLE_DIR" - cd "$INSPECTOR_DIR" - - echo "Fetching Inspector dependencies..." - npm install - - echo "Validating Inspector" - "$INSPECTOR_DIR"/node_modules/.bin/eslint js/* - - echo "Building Inspector..." - BUILD_OUTPUT_DIR="$RESOURCE_BUNDLE_DIR" npm run build - cd "$CURRENT_DIR" - cp "$INSPECTOR_DIR/index.html" "$RESOURCE_BUNDLE_DIR" - echo "Done" -} - -while getopts " i d D h " option; do +while getopts " d D h " option; do case "$option" in - i ) BUILD_INSPECTOR=1;; d ) FETCH_DEPS=1;; D ) FETCH_DEPS=1; USE_SSH="--use-ssh";; h ) print_usage; exit 1;; @@ -104,12 +77,3 @@ done if [[ -n ${FETCH_DEPS+x} ]]; then fetch_and_build_dependencies fi - -if [[ -n ${BUILD_INSPECTOR+x} ]]; then - build_inspector -fi - -if [[ -z ${FETCH_DEPS+x} && -z ${BUILD_INSPECTOR+x} ]]; then - fetch_and_build_dependencies - build_inspector -fi diff --git a/WebDriverAgent.xcodeproj/project.pbxproj b/WebDriverAgent.xcodeproj/project.pbxproj index 83a8dcad2..f42222199 100644 --- a/WebDriverAgent.xcodeproj/project.pbxproj +++ b/WebDriverAgent.xcodeproj/project.pbxproj @@ -83,7 +83,6 @@ 641EE6142240C5CA00173FCB /* FBAlertViewCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7511CAEDF0C008C271F /* FBAlertViewCommands.m */; }; 641EE6152240C5CA00173FCB /* XCUIElement+FBScrolling.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB74A1CAEDF0C008C271F /* XCUIElement+FBScrolling.m */; }; 641EE6162240C5CA00173FCB /* FBSessionCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7611CAEDF0C008C271F /* FBSessionCommands.m */; }; - 641EE6172240C5CA00173FCB /* FBInspectorCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB75B1CAEDF0C008C271F /* FBInspectorCommands.m */; }; 641EE6182240C5CA00173FCB /* XCElementSnapshot+FBHitPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = EE006EAF1EBA1AA9006900A4 /* XCElementSnapshot+FBHitPoint.m */; }; 641EE6192240C5CA00173FCB /* FBConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9B76A21CF7A43900275851 /* FBConfiguration.m */; }; 641EE61A2240C5CA00173FCB /* FBElementCache.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC088E41CB56AC000B65968 /* FBElementCache.m */; }; @@ -195,7 +194,6 @@ 641EE68D2240C5CA00173FCB /* XCTestDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACD61E3B77D600A02D78 /* XCTestDriver.h */; settings = {ATTRIBUTES = (Public, ); }; }; 641EE68E2240C5CA00173FCB /* _XCTNSNotificationExpectationImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACA11E3B77D600A02D78 /* _XCTNSNotificationExpectationImplementation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 641EE68F2240C5CA00173FCB /* XCSynthesizedEventRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACC91E3B77D600A02D78 /* XCSynthesizedEventRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 641EE6902240C5CA00173FCB /* FBInspectorCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB75A1CAEDF0C008C271F /* FBInspectorCommands.h */; }; 641EE6912240C5CA00173FCB /* FBApplicationProcessProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7681CAEDF0C008C271F /* FBApplicationProcessProxy.h */; }; 641EE6922240C5CA00173FCB /* XCTWaiterDelegatePrivate-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACF61E3B77D600A02D78 /* XCTWaiterDelegatePrivate-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; 641EE6932240C5CA00173FCB /* XCTestManager_IDEInterface-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACDC1E3B77D600A02D78 /* XCTestManager_IDEInterface-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -447,8 +445,6 @@ EE158ABF1CBD456F00A3E3F0 /* FBElementCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7571CAEDF0C008C271F /* FBElementCommands.m */; }; EE158AC01CBD456F00A3E3F0 /* FBFindElementCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7581CAEDF0C008C271F /* FBFindElementCommands.h */; }; EE158AC11CBD456F00A3E3F0 /* FBFindElementCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7591CAEDF0C008C271F /* FBFindElementCommands.m */; }; - EE158AC21CBD456F00A3E3F0 /* FBInspectorCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB75A1CAEDF0C008C271F /* FBInspectorCommands.h */; }; - EE158AC31CBD456F00A3E3F0 /* FBInspectorCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB75B1CAEDF0C008C271F /* FBInspectorCommands.m */; }; EE158AC41CBD456F00A3E3F0 /* FBOrientationCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB75C1CAEDF0C008C271F /* FBOrientationCommands.h */; }; EE158AC51CBD456F00A3E3F0 /* FBOrientationCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB75D1CAEDF0C008C271F /* FBOrientationCommands.m */; }; EE158AC61CBD456F00A3E3F0 /* FBScreenshotCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB75E1CAEDF0C008C271F /* FBScreenshotCommands.h */; }; @@ -1111,8 +1107,6 @@ EE9AB7571CAEDF0C008C271F /* FBElementCommands.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBElementCommands.m; sourceTree = ""; }; EE9AB7581CAEDF0C008C271F /* FBFindElementCommands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBFindElementCommands.h; sourceTree = ""; }; EE9AB7591CAEDF0C008C271F /* FBFindElementCommands.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBFindElementCommands.m; sourceTree = ""; }; - EE9AB75A1CAEDF0C008C271F /* FBInspectorCommands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBInspectorCommands.h; sourceTree = ""; }; - EE9AB75B1CAEDF0C008C271F /* FBInspectorCommands.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBInspectorCommands.m; sourceTree = ""; }; EE9AB75C1CAEDF0C008C271F /* FBOrientationCommands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBOrientationCommands.h; sourceTree = ""; }; EE9AB75D1CAEDF0C008C271F /* FBOrientationCommands.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBOrientationCommands.m; sourceTree = ""; }; EE9AB75E1CAEDF0C008C271F /* FBScreenshotCommands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBScreenshotCommands.h; sourceTree = ""; }; @@ -1526,8 +1520,6 @@ EE9AB7571CAEDF0C008C271F /* FBElementCommands.m */, EE9AB7581CAEDF0C008C271F /* FBFindElementCommands.h */, EE9AB7591CAEDF0C008C271F /* FBFindElementCommands.m */, - EE9AB75A1CAEDF0C008C271F /* FBInspectorCommands.h */, - EE9AB75B1CAEDF0C008C271F /* FBInspectorCommands.m */, EE9AB75C1CAEDF0C008C271F /* FBOrientationCommands.h */, EE9AB75D1CAEDF0C008C271F /* FBOrientationCommands.m */, EE9AB75E1CAEDF0C008C271F /* FBScreenshotCommands.h */, @@ -2045,7 +2037,6 @@ 641EE68D2240C5CA00173FCB /* XCTestDriver.h in Headers */, 641EE68E2240C5CA00173FCB /* _XCTNSNotificationExpectationImplementation.h in Headers */, 641EE68F2240C5CA00173FCB /* XCSynthesizedEventRecord.h in Headers */, - 641EE6902240C5CA00173FCB /* FBInspectorCommands.h in Headers */, 641EE6912240C5CA00173FCB /* FBApplicationProcessProxy.h in Headers */, 641EE6922240C5CA00173FCB /* XCTWaiterDelegatePrivate-Protocol.h in Headers */, 641EE6932240C5CA00173FCB /* XCTestManager_IDEInterface-Protocol.h in Headers */, @@ -2248,7 +2239,6 @@ EE35AD471E3B77D600A02D78 /* XCTestDriver.h in Headers */, EE35AD121E3B77D600A02D78 /* _XCTNSNotificationExpectationImplementation.h in Headers */, EE35AD3A1E3B77D600A02D78 /* XCSynthesizedEventRecord.h in Headers */, - EE158AC21CBD456F00A3E3F0 /* FBInspectorCommands.h in Headers */, EE158AF91CBD456F00A3E3F0 /* FBApplicationProcessProxy.h in Headers */, EE35AD671E3B77D600A02D78 /* XCTWaiterDelegatePrivate-Protocol.h in Headers */, EE35AD4D1E3B77D600A02D78 /* XCTestManager_IDEInterface-Protocol.h in Headers */, @@ -2758,7 +2748,6 @@ 641EE6142240C5CA00173FCB /* FBAlertViewCommands.m in Sources */, 641EE6152240C5CA00173FCB /* XCUIElement+FBScrolling.m in Sources */, 641EE6162240C5CA00173FCB /* FBSessionCommands.m in Sources */, - 641EE6172240C5CA00173FCB /* FBInspectorCommands.m in Sources */, 641EE6182240C5CA00173FCB /* XCElementSnapshot+FBHitPoint.m in Sources */, 641EE6192240C5CA00173FCB /* FBConfiguration.m in Sources */, 641EE61A2240C5CA00173FCB /* FBElementCache.m in Sources */, @@ -2858,7 +2847,6 @@ EE158AB91CBD456F00A3E3F0 /* FBAlertViewCommands.m in Sources */, EE158AB31CBD456F00A3E3F0 /* XCUIElement+FBScrolling.m in Sources */, EE158AC91CBD456F00A3E3F0 /* FBSessionCommands.m in Sources */, - EE158AC31CBD456F00A3E3F0 /* FBInspectorCommands.m in Sources */, EE006EB11EBA1AA9006900A4 /* XCElementSnapshot+FBHitPoint.m in Sources */, EE9B76A71CF7A43900275851 /* FBConfiguration.m in Sources */, EE158AD31CBD456F00A3E3F0 /* FBElementCache.m in Sources */, diff --git a/WebDriverAgentLib/Commands/FBInspectorCommands.h b/WebDriverAgentLib/Commands/FBInspectorCommands.h deleted file mode 100644 index 32e1e6abd..000000000 --- a/WebDriverAgentLib/Commands/FBInspectorCommands.h +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBInspectorCommands : NSObject - -@end - -NS_ASSUME_NONNULL_END diff --git a/WebDriverAgentLib/Commands/FBInspectorCommands.m b/WebDriverAgentLib/Commands/FBInspectorCommands.m deleted file mode 100644 index 71d6fa99e..000000000 --- a/WebDriverAgentLib/Commands/FBInspectorCommands.m +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -#import "FBInspectorCommands.h" - -@implementation FBInspectorCommands - -#pragma mark - - -+ (NSArray *)routes -{ - return @[ - [[FBRoute GET:@"/inspector"].withoutSession respondWithBlock: ^ id (FBRouteRequest *request) { - return FBResponseFileWithPath([[self class] inspectorHTMLFilePath]); - }], - [[FBRoute GET:@"/inspector.js"].withoutSession respondWithBlock: ^ id (FBRouteRequest *request) { - return FBResponseFileWithPath([[self class] inspectorJSFilePath]); - }], - ]; -} - -+ (NSBundle *)inspectorResourcesBundle -{ - static dispatch_once_t onceToken; - static NSBundle *inspectorResourcesBundle; - dispatch_once(&onceToken, ^{ - NSURL *url = [[NSBundle bundleForClass:[self class]] - URLForResource:@"WebDriverAgent" withExtension:@"bundle"]; - inspectorResourcesBundle = [NSBundle bundleWithURL:url]; - }); - return inspectorResourcesBundle; -} - -+ (NSString *)inspectorHTMLFilePath -{ - return [[self inspectorResourcesBundle] pathForResource:@"index" ofType:@"html"]; -} - -+ (NSString *)inspectorJSFilePath -{ - return [[self inspectorResourcesBundle] pathForResource:@"inspector" ofType:@"js"]; -} - -@end