Best JavaScript code snippet using playwright-internal
DevicesView.js
Source:DevicesView.js
...8 constructor() {9 super(true);10 this.registerRequiredCSS('devices/devicesView.css');11 this.contentElement.classList.add('devices-view');12 var hbox = this.contentElement.createChild('div', 'hbox devices-container');13 var sidebar = hbox.createChild('div', 'devices-sidebar');14 sidebar.createChild('div', 'devices-view-title').createTextChild(Common.UIString('Devices'));15 this._sidebarList = sidebar.createChild('div', 'devices-sidebar-list');16 this._discoveryView = new Devices.DevicesView.DiscoveryView();17 this._sidebarListSpacer = this._sidebarList.createChild('div', 'devices-sidebar-spacer');18 this._discoveryListItem = this._sidebarList.createChild('div', 'devices-sidebar-item');19 this._discoveryListItem.textContent = Common.UIString('Settings');20 this._discoveryListItem.addEventListener(21 'click', this._selectSidebarListItem.bind(this, this._discoveryListItem, this._discoveryView));22 /** @type {!Map<string, !Devices.DevicesView.DeviceView>} */23 this._viewById = new Map();24 /** @type {!Array<!Adb.Device>} */25 this._devices = [];26 /** @type {!Map<string, !Element>} */27 this._listItemById = new Map();28 this._viewContainer = hbox.createChild('div', 'flex-auto vbox');29 var discoveryFooter = this.contentElement.createChild('div', 'devices-footer');30 this._deviceCountSpan = discoveryFooter.createChild('span');31 discoveryFooter.createChild('span').textContent = Common.UIString(' Read ');32 discoveryFooter.appendChild(UI.createExternalLink(33 'https://developers.google.com/chrome-developer-tools/docs/remote-debugging',34 Common.UIString('remote debugging documentation')));35 discoveryFooter.createChild('span').textContent = Common.UIString(' for more information.');36 this._updateFooter();37 this._selectSidebarListItem(this._discoveryListItem, this._discoveryView);38 InspectorFrontendHost.events.addEventListener(39 InspectorFrontendHostAPI.Events.DevicesUpdated, this._devicesUpdated, this);40 InspectorFrontendHost.events.addEventListener(41 InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged, this._devicesDiscoveryConfigChanged, this);42 InspectorFrontendHost.events.addEventListener(43 InspectorFrontendHostAPI.Events.DevicesPortForwardingStatusChanged, this._devicesPortForwardingStatusChanged,44 this);45 this.contentElement.tabIndex = 0;46 this.setDefaultFocusedElement(this.contentElement);47 }48 /**49 * @return {!Devices.DevicesView}50 */51 static _instance() {52 if (!Devices.DevicesView._instanceObject)53 Devices.DevicesView._instanceObject = new Devices.DevicesView();54 return Devices.DevicesView._instanceObject;55 }56 /**57 * @param {!Element} listItem58 * @param {!UI.Widget} view59 */60 _selectSidebarListItem(listItem, view) {61 if (this._selectedListItem === listItem)62 return;63 if (this._selectedListItem) {64 this._selectedListItem.classList.remove('selected');65 this._visibleView.detach();66 }67 this._visibleView = view;68 this._selectedListItem = listItem;69 this._visibleView.show(this._viewContainer);70 this._selectedListItem.classList.add('selected');71 }72 /**73 * @param {!Common.Event} event74 */75 _devicesUpdated(event) {76 this._devices =77 /** @type {!Array.<!Adb.Device>} */ (event.data).slice().filter(d => d.adbSerial.toUpperCase() !== 'WEBRTC');78 for (var device of this._devices) {79 if (!device.adbConnected)80 device.adbModel = Common.UIString('Unknown');81 }82 var ids = new Set();83 for (var device of this._devices)84 ids.add(device.id);85 var selectedRemoved = false;86 for (var deviceId of this._viewById.keys()) {87 if (!ids.has(deviceId)) {88 var listItem = /** @type {!Element} */ (this._listItemById.get(deviceId));89 this._listItemById.remove(deviceId);90 this._viewById.remove(deviceId);91 listItem.remove();92 if (listItem === this._selectedListItem)93 selectedRemoved = true;94 }95 }96 for (var device of this._devices) {97 var view = this._viewById.get(device.id);98 var listItem = this._listItemById.get(device.id);99 if (!view) {100 view = new Devices.DevicesView.DeviceView();101 this._viewById.set(device.id, view);102 listItem = this._createSidebarListItem(view);103 this._listItemById.set(device.id, listItem);104 this._sidebarList.insertBefore(listItem, this._sidebarListSpacer);105 }106 listItem._title.textContent = device.adbModel;107 listItem._status.textContent =108 device.adbConnected ? Common.UIString('Connected') : Common.UIString('Pending Authorization');109 listItem.classList.toggle('device-connected', device.adbConnected);110 view.update(device);111 }112 if (selectedRemoved)113 this._selectSidebarListItem(this._discoveryListItem, this._discoveryView);114 this._updateFooter();115 }116 /**117 * @param {!UI.Widget} view118 * @return {!Element}119 */120 _createSidebarListItem(view) {121 var listItem = createElementWithClass('div', 'devices-sidebar-item');122 listItem.addEventListener('click', this._selectSidebarListItem.bind(this, listItem, view));123 listItem._title = listItem.createChild('div', 'devices-sidebar-item-title');124 listItem._status = listItem.createChild('div', 'devices-sidebar-item-status');125 return listItem;126 }127 /**128 * @param {!Common.Event} event129 */130 _devicesDiscoveryConfigChanged(event) {131 var discoverUsbDevices = /** @type {boolean} */ (event.data['discoverUsbDevices']);132 var portForwardingEnabled = /** @type {boolean} */ (event.data['portForwardingEnabled']);133 var portForwardingConfig = /** @type {!Adb.PortForwardingConfig} */ (event.data['portForwardingConfig']);134 this._discoveryView.discoveryConfigChanged(discoverUsbDevices, portForwardingEnabled, portForwardingConfig);135 }136 /**137 * @param {!Common.Event} event138 */139 _devicesPortForwardingStatusChanged(event) {140 var status = /** @type {!Adb.PortForwardingStatus} */ (event.data);141 for (var deviceId in status) {142 var view = this._viewById.get(deviceId);143 if (view)144 view.portForwardingStatusChanged(status[deviceId]);145 }146 for (var deviceId of this._viewById.keys()) {147 var view = this._viewById.get(deviceId);148 if (view && !(deviceId in status))149 view.portForwardingStatusChanged({ports: {}, browserId: ''});150 }151 }152 _updateFooter() {153 this._deviceCountSpan.textContent = !this._devices.length ?154 Common.UIString('No devices detected.') :155 this._devices.length === 1 ? Common.UIString('1 device detected.') :156 Common.UIString('%d devices detected.', this._devices.length);157 }158 /**159 * @override160 */161 wasShown() {162 super.wasShown();163 InspectorFrontendHost.setDevicesUpdatesEnabled(true);164 }165 /**166 * @override167 */168 willHide() {169 super.wasShown();170 InspectorFrontendHost.setDevicesUpdatesEnabled(false);171 }172};173/**174 * @implements {UI.ListWidget.Delegate}175 * @unrestricted176 */177Devices.DevicesView.DiscoveryView = class extends UI.VBox {178 constructor() {179 super();180 this.setMinimumSize(100, 100);181 this.element.classList.add('discovery-view');182 this.contentElement.createChild('div', 'hbox device-text-row').createChild('div', 'view-title').textContent =183 Common.UIString('Settings');184 var discoverUsbDevicesCheckbox = createCheckboxLabel(Common.UIString('Discover USB devices'));185 discoverUsbDevicesCheckbox.classList.add('usb-checkbox');186 this.element.appendChild(discoverUsbDevicesCheckbox);187 this._discoverUsbDevicesCheckbox = discoverUsbDevicesCheckbox.checkboxElement;188 this._discoverUsbDevicesCheckbox.addEventListener('click', this._updateDiscoveryConfig.bind(this), false);189 var help = this.element.createChild('div', 'discovery-help');190 help.createChild('span').textContent = Common.UIString('Need help? Read Chrome ');191 help.appendChild(UI.createExternalLink(192 'https://developers.google.com/chrome-developer-tools/docs/remote-debugging',193 Common.UIString('remote debugging documentation.')));194 var portForwardingHeader = this.element.createChild('div', 'port-forwarding-header');195 var portForwardingEnabledCheckbox = createCheckboxLabel(Common.UIString('Port forwarding'));196 portForwardingEnabledCheckbox.classList.add('port-forwarding-checkbox');197 portForwardingHeader.appendChild(portForwardingEnabledCheckbox);198 this._portForwardingEnabledCheckbox = portForwardingEnabledCheckbox.checkboxElement;199 this._portForwardingEnabledCheckbox.addEventListener('click', this._updateDiscoveryConfig.bind(this), false);200 var portForwardingFooter = this.element.createChild('div', 'port-forwarding-footer');201 portForwardingFooter.createChild('span').textContent = Common.UIString(202 'Define the listening port on your device that maps to a port accessible from your development machine. ');203 portForwardingFooter.appendChild(UI.createExternalLink(204 'https://developer.chrome.com/devtools/docs/remote-debugging#port-forwarding', Common.UIString('Learn more')));205 this._list = new UI.ListWidget(this);206 this._list.registerRequiredCSS('devices/devicesView.css');207 this._list.element.classList.add('port-forwarding-list');208 var placeholder = createElementWithClass('div', 'port-forwarding-list-empty');209 placeholder.textContent = Common.UIString('No rules');210 this._list.setEmptyPlaceholder(placeholder);211 this._list.show(this.element);212 this.element.appendChild(213 createTextButton(Common.UIString('Add rule'), this._addRuleButtonClicked.bind(this), 'add-rule-button'));214 /** @type {!Array<!Adb.PortForwardingRule>} */215 this._portForwardingConfig = [];216 }217 _addRuleButtonClicked() {218 this._list.addNewItem(this._portForwardingConfig.length, {port: '', address: ''});219 }220 /**221 * @param {boolean} discoverUsbDevices222 * @param {boolean} portForwardingEnabled223 * @param {!Adb.PortForwardingConfig} portForwardingConfig224 */225 discoveryConfigChanged(discoverUsbDevices, portForwardingEnabled, portForwardingConfig) {226 this._discoverUsbDevicesCheckbox.checked = discoverUsbDevices;227 this._portForwardingEnabledCheckbox.checked = portForwardingEnabled;228 this._portForwardingConfig = [];229 this._list.clear();230 for (var key of Object.keys(portForwardingConfig)) {231 var rule = /** @type {!Adb.PortForwardingRule} */ ({port: key, address: portForwardingConfig[key]});232 this._portForwardingConfig.push(rule);233 this._list.appendItem(rule, true);234 }235 }236 /**237 * @override238 * @param {*} item239 * @param {boolean} editable240 * @return {!Element}241 */242 renderItem(item, editable) {243 var rule = /** @type {!Adb.PortForwardingRule} */ (item);244 var element = createElementWithClass('div', 'port-forwarding-list-item');245 var port = element.createChild('div', 'port-forwarding-value port-forwarding-port');246 port.createChild('span', 'port-localhost').textContent = Common.UIString('localhost:');247 port.createTextChild(rule.port);248 element.createChild('div', 'port-forwarding-separator');249 element.createChild('div', 'port-forwarding-value').textContent = rule.address;250 return element;251 }252 /**253 * @override254 * @param {*} item255 * @param {number} index256 */257 removeItemRequested(item, index) {258 this._portForwardingConfig.splice(index, 1);259 this._list.removeItem(index);260 this._updateDiscoveryConfig();261 }262 /**263 * @override264 * @param {*} item265 * @param {!UI.ListWidget.Editor} editor266 * @param {boolean} isNew267 */268 commitEdit(item, editor, isNew) {269 var rule = /** @type {!Adb.PortForwardingRule} */ (item);270 rule.port = editor.control('port').value.trim();271 rule.address = editor.control('address').value.trim();272 if (isNew)273 this._portForwardingConfig.push(rule);274 this._updateDiscoveryConfig();275 }276 /**277 * @override278 * @param {*} item279 * @return {!UI.ListWidget.Editor}280 */281 beginEdit(item) {282 var rule = /** @type {!Adb.PortForwardingRule} */ (item);283 var editor = this._createEditor();284 editor.control('port').value = rule.port;285 editor.control('address').value = rule.address;286 return editor;287 }288 /**289 * @return {!UI.ListWidget.Editor}290 */291 _createEditor() {292 if (this._editor)293 return this._editor;294 var editor = new UI.ListWidget.Editor();295 this._editor = editor;296 var content = editor.contentElement();297 var fields = content.createChild('div', 'port-forwarding-edit-row');298 fields.createChild('div', 'port-forwarding-value port-forwarding-port')299 .appendChild(editor.createInput('port', 'text', 'Device port (3333)', portValidator.bind(this)));300 fields.createChild('div', 'port-forwarding-separator port-forwarding-separator-invisible');301 fields.createChild('div', 'port-forwarding-value')302 .appendChild(editor.createInput('address', 'text', 'Local address (dev.example.corp:3333)', addressValidator));303 return editor;304 /**305 * @param {*} item306 * @param {number} index307 * @param {!HTMLInputElement|!HTMLSelectElement} input308 * @this {Devices.DevicesView.DiscoveryView}309 * @return {boolean}310 */311 function portValidator(item, index, input) {312 var value = input.value.trim();313 var match = value.match(/^(\d+)$/);314 if (!match)315 return false;316 var port = parseInt(match[1], 10);317 if (port < 1024 || port > 65535)318 return false;319 for (var i = 0; i < this._portForwardingConfig.length; ++i) {320 if (i !== index && this._portForwardingConfig[i].port === value)321 return false;322 }323 return true;324 }325 /**326 * @param {*} item327 * @param {number} index328 * @param {!HTMLInputElement|!HTMLSelectElement} input329 * @return {boolean}330 */331 function addressValidator(item, index, input) {332 var match = input.value.trim().match(/^([a-zA-Z0-9\.\-_]+):(\d+)$/);333 if (!match)334 return false;335 var port = parseInt(match[2], 10);336 return port <= 65535;337 }338 }339 _updateDiscoveryConfig() {340 var configMap = /** @type {!Adb.PortForwardingConfig} */ ({});341 for (var rule of this._portForwardingConfig)342 configMap[rule.port] = rule.address;343 InspectorFrontendHost.setDevicesDiscoveryConfig(344 this._discoverUsbDevicesCheckbox.checked, this._portForwardingEnabledCheckbox.checked, configMap);345 }346};347/**348 * @unrestricted349 */350Devices.DevicesView.DeviceView = class extends UI.VBox {351 constructor() {352 super();353 this.setMinimumSize(100, 100);354 this.contentElement.classList.add('device-view');355 var topRow = this.contentElement.createChild('div', 'hbox device-text-row');356 this._deviceTitle = topRow.createChild('div', 'view-title');357 this._deviceSerial = topRow.createChild('div', 'device-serial');358 this._portStatus = this.contentElement.createChild('div', 'device-port-status hidden');359 this._deviceOffline = this.contentElement.createChild('div');360 this._deviceOffline.textContent =361 Common.UIString('Pending authentication: please accept debugging session on the device.');362 this._noBrowsers = this.contentElement.createChild('div');363 this._noBrowsers.textContent = Common.UIString('No browsers detected.');364 this._browsers = this.contentElement.createChild('div', 'device-browser-list vbox');365 /** @type {!Map<string, !Devices.DevicesView.BrowserSection>} */366 this._browserById = new Map();367 this._device = null;368 }369 /**370 * @param {!Adb.Device} device371 */372 update(device) {373 if (!this._device || this._device.adbModel !== device.adbModel)374 this._deviceTitle.textContent = device.adbModel;375 if (!this._device || this._device.adbSerial !== device.adbSerial)376 this._deviceSerial.textContent = '#' + device.adbSerial;377 this._deviceOffline.classList.toggle('hidden', device.adbConnected);378 this._noBrowsers.classList.toggle('hidden', !device.adbConnected || !!device.browsers.length);379 this._browsers.classList.toggle('hidden', !device.adbConnected || !device.browsers.length);380 var browserIds = new Set();381 for (var browser of device.browsers)382 browserIds.add(browser.id);383 for (var browserId of this._browserById.keys()) {384 if (!browserIds.has(browserId)) {385 this._browserById.get(browserId).element.remove();386 this._browserById.remove(browserId);387 }388 }389 for (var browser of device.browsers) {390 var section = this._browserById.get(browser.id);391 if (!section) {392 section = this._createBrowserSection();393 this._browserById.set(browser.id, section);394 this._browsers.appendChild(section.element);395 }396 this._updateBrowserSection(section, browser);397 }398 this._device = device;399 }400 /**401 * @return {!Devices.DevicesView.BrowserSection}402 */403 _createBrowserSection() {404 var element = createElementWithClass('div', 'vbox flex-none');405 var topRow = element.createChild('div', '');406 var title = topRow.createChild('div', 'device-browser-title');407 var newTabRow = element.createChild('div', 'device-browser-new-tab');408 newTabRow.createChild('div', '').textContent = Common.UIString('New tab:');409 var newTabInput = newTabRow.createChild('input', '');410 newTabInput.type = 'text';411 newTabInput.placeholder = Common.UIString('Enter URL');412 newTabInput.addEventListener('keydown', newTabKeyDown, false);413 var newTabButton = createTextButton(Common.UIString('Open'), openNewTab);414 newTabRow.appendChild(newTabButton);415 var pages = element.createChild('div', 'device-page-list vbox');416 var viewMore = element.createChild('div', 'device-view-more');417 viewMore.addEventListener('click', viewMoreClick, false);418 updateViewMoreTitle();419 var section = {420 browser: null,421 element: element,422 title: title,423 pages: pages,424 viewMore: viewMore,425 newTab: newTabRow,426 pageSections: new Map()427 };428 return section;429 function viewMoreClick() {430 pages.classList.toggle('device-view-more-toggled');431 updateViewMoreTitle();432 }433 function updateViewMoreTitle() {434 viewMore.textContent = pages.classList.contains('device-view-more-toggled') ?435 Common.UIString('View less tabs\u2026') :436 Common.UIString('View more tabs\u2026');437 }438 /**439 * @param {!Event} event440 */441 function newTabKeyDown(event) {442 if (event.key === 'Enter') {443 event.consume(true);444 openNewTab();445 }446 }447 function openNewTab() {448 if (section.browser) {449 InspectorFrontendHost.openRemotePage(section.browser.id, newTabInput.value.trim() || 'about:blank');450 newTabInput.value = '';451 }452 }453 }454 /**455 * @param {!Devices.DevicesView.BrowserSection} section456 * @param {!Adb.Browser} browser457 */458 _updateBrowserSection(section, browser) {459 if (!section.browser || section.browser.adbBrowserName !== browser.adbBrowserName ||460 section.browser.adbBrowserVersion !== browser.adbBrowserVersion) {461 if (browser.adbBrowserVersion)462 section.title.textContent = String.sprintf('%s (%s)', browser.adbBrowserName, browser.adbBrowserVersion);463 else464 section.title.textContent = browser.adbBrowserName;465 }466 var pageIds = new Set();467 for (var page of browser.pages)468 pageIds.add(page.id);469 for (var pageId of section.pageSections.keys()) {470 if (!pageIds.has(pageId)) {471 section.pageSections.get(pageId).element.remove();472 section.pageSections.remove(pageId);473 }474 }475 for (var index = 0; index < browser.pages.length; ++index) {476 var page = browser.pages[index];477 var pageSection = section.pageSections.get(page.id);478 if (!pageSection) {479 pageSection = this._createPageSection();480 section.pageSections.set(page.id, pageSection);481 section.pages.appendChild(pageSection.element);482 }483 this._updatePageSection(pageSection, page);484 if (!index && section.pages.firstChild !== pageSection.element)485 section.pages.insertBefore(pageSection.element, section.pages.firstChild);486 }487 var kViewMoreCount = 3;488 for (var index = 0, element = section.pages.firstChild; element; element = element.nextSibling, ++index)489 element.classList.toggle('device-view-more-page', index >= kViewMoreCount);490 section.viewMore.classList.toggle('device-needs-view-more', browser.pages.length > kViewMoreCount);491 section.newTab.classList.toggle('hidden', !browser.adbBrowserChromeVersion);492 section.browser = browser;493 }494 /**495 * @return {!Devices.DevicesView.PageSection}496 */497 _createPageSection() {498 var element = createElementWithClass('div', 'vbox');499 var titleRow = element.createChild('div', 'device-page-title-row');500 var title = titleRow.createChild('div', 'device-page-title');501 var inspect = createTextButton(Common.UIString('Inspect'), doAction.bind(null, 'inspect'), 'device-inspect-button');502 titleRow.appendChild(inspect);503 var toolbar = new UI.Toolbar('');504 toolbar.appendToolbarItem(new UI.ToolbarMenuButton(appendActions));505 titleRow.appendChild(toolbar.element);506 var url = element.createChild('div', 'device-page-url');507 var section = {page: null, element: element, title: title, url: url, inspect: inspect};508 return section;509 /**510 * @param {!UI.ContextMenu} contextMenu511 */512 function appendActions(contextMenu) {513 contextMenu.appendItem(Common.UIString('Reload'), doAction.bind(null, 'reload'));514 contextMenu.appendItem(Common.UIString('Focus'), doAction.bind(null, 'activate'));515 contextMenu.appendItem(Common.UIString('Close'), doAction.bind(null, 'close'));516 }517 /**518 * @param {string} action519 */520 function doAction(action) {521 if (section.page)522 InspectorFrontendHost.performActionOnRemotePage(section.page.id, action);523 }524 }525 /**526 * @param {!Devices.DevicesView.PageSection} section527 * @param {!Adb.Page} page528 */529 _updatePageSection(section, page) {530 if (!section.page || section.page.name !== page.name) {531 section.title.textContent = page.name;532 section.title.title = page.name;533 }534 if (!section.page || section.page.url !== page.url) {535 section.url.textContent = '';536 section.url.appendChild(UI.createExternalLink(page.url));537 }538 section.inspect.disabled = page.attached;539 section.page = page;540 }541 /**542 * @param {!Adb.DevicePortForwardingStatus} status543 */544 portForwardingStatusChanged(status) {545 var json = JSON.stringify(status);546 if (json === this._cachedPortStatus)547 return;548 this._cachedPortStatus = json;549 this._portStatus.removeChildren();550 this._portStatus.createChild('div', 'device-port-status-text').textContent = Common.UIString('Port Forwarding:');551 var connected = [];552 var transient = [];553 var error = [];554 var empty = true;555 for (var port in status.ports) {556 if (!status.ports.hasOwnProperty(port))557 continue;558 empty = false;559 var portStatus = status.ports[port];560 var portNumber = createElementWithClass('div', 'device-view-port-number monospace');561 portNumber.textContent = ':' + port;562 if (portStatus >= 0)563 this._portStatus.appendChild(portNumber);564 else...
ResponsiveDesignView.js
Source:ResponsiveDesignView.js
...15 this.element.classList.add("overflow-hidden");16 this._responsiveDesignContainer = new WebInspector.VBox();17 this._createToolbar();18 this._mediaInspector = new WebInspector.MediaQueryInspector();19 this._mediaInspectorContainer = this._responsiveDesignContainer.element.createChild("div");20 this._updateMediaQueryInspector();21 this._canvasContainer = new WebInspector.View();22 this._canvasContainer.element.classList.add("responsive-design");23 this._canvasContainer.show(this._responsiveDesignContainer.element);24 this._canvas = this._canvasContainer.element.createChild("canvas", "fill");25 this._rulerGlasspane = this._canvasContainer.element.createChild("div", "responsive-design-ruler-glasspane");26 this._rulerGlasspane.appendChild(this._mediaInspector.rulerDecorationLayer());27 this._warningMessage = this._canvasContainer.element.createChild("div", "responsive-design-warning hidden");28 this._warningMessage.createChild("div", "warning-icon-small");29 this._warningMessage.createChild("span");30 var warningCloseButton = this._warningMessage.createChild("div", "close-button");31 warningCloseButton.addEventListener("click", WebInspector.overridesSupport.clearWarningMessage.bind(WebInspector.overridesSupport), false);32 WebInspector.overridesSupport.addEventListener(WebInspector.OverridesSupport.Events.OverridesWarningUpdated, this._overridesWarningUpdated, this);33 this._slidersContainer = this._canvasContainer.element.createChild("div", "vbox responsive-design-sliders-container");34 var hbox = this._slidersContainer.createChild("div", "hbox flex-auto");35 this._heightSliderContainer = this._slidersContainer.createChild("div", "hbox responsive-design-slider-height");36 this._pageContainer = hbox.createChild("div", "vbox flex-auto");37 this._widthSliderContainer = hbox.createChild("div", "vbox responsive-design-slider-width");38 this._widthSlider = this._widthSliderContainer.createChild("div", "responsive-design-slider-thumb");39 this._widthSlider.createChild("div", "responsive-design-thumb-handle");40 this._createResizer(this._widthSlider, false);41 this._heightSlider = this._heightSliderContainer.createChild("div", "responsive-design-slider-thumb");42 this._heightSlider.createChild("div", "responsive-design-thumb-handle");43 this._createResizer(this._heightSlider, true);44 this._inspectedPagePlaceholder = inspectedPagePlaceholder;45 inspectedPagePlaceholder.show(this.element);46 this._enabled = false;47 WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.ZoomChanged, this._onZoomChanged, this);48 WebInspector.overridesSupport.addEventListener(WebInspector.OverridesSupport.Events.EmulationStateChanged, this._emulationEnabledChanged, this);49 this._mediaInspector.addEventListener(WebInspector.MediaQueryInspector.Events.HeightUpdated, this.onResize, this);50 this._emulationEnabledChanged();51 this._overridesWarningUpdated();52};53// Measured in DIP.54WebInspector.ResponsiveDesignView.SliderWidth = 19;55WebInspector.ResponsiveDesignView.RulerWidth = 22;56WebInspector.ResponsiveDesignView.prototype = {57 _invalidateCache: function()58 {59 delete this._cachedScale;60 delete this._cachedCssCanvasWidth;61 delete this._cachedCssCanvasHeight;62 delete this._cachedCssHeight;63 delete this._cachedCssWidth;64 delete this._cachedZoomFactor;65 delete this._availableSize;66 },67 _emulationEnabledChanged: function()68 {69 var enabled = WebInspector.overridesSupport.emulationEnabled();70 this._mediaInspector.setEnabled(enabled);71 if (enabled && !this._enabled) {72 this._invalidateCache();73 this._ignoreResize = true;74 this._enabled = true;75 this._inspectedPagePlaceholder.clearMinimumSizeAndMargins();76 this._inspectedPagePlaceholder.show(this._pageContainer);77 this._responsiveDesignContainer.show(this.element);78 delete this._ignoreResize;79 this.onResize();80 } else if (!enabled && this._enabled) {81 this._invalidateCache();82 this._ignoreResize = true;83 this._enabled = false;84 this._scale = 1;85 this._inspectedPagePlaceholder.restoreMinimumSizeAndMargins();86 this._responsiveDesignContainer.detach();87 this._inspectedPagePlaceholder.show(this.element);88 delete this._ignoreResize;89 this.onResize();90 }91 },92 /**93 * WebInspector.OverridesSupport.PageResizer override.94 * @param {number} dipWidth95 * @param {number} dipHeight96 * @param {number} scale97 */98 update: function(dipWidth, dipHeight, scale)99 {100 this._scale = scale;101 this._dipWidth = dipWidth;102 this._dipHeight = dipHeight;103 this._updateUI();104 },105 updatePageResizer: function()106 {107 WebInspector.overridesSupport.setPageResizer(this, this._availableDipSize());108 },109 /**110 * @return {!Size}111 */112 _availableDipSize: function()113 {114 if (typeof this._availableSize === "undefined") {115 var zoomFactor = WebInspector.zoomManager.zoomFactor();116 var rect = this._canvasContainer.element.getBoundingClientRect();117 this._availableSize = new Size(rect.width * zoomFactor - WebInspector.ResponsiveDesignView.RulerWidth,118 rect.height * zoomFactor - WebInspector.ResponsiveDesignView.RulerWidth);119 }120 return this._availableSize;121 },122 /**123 * @param {!Element} element124 * @param {boolean} vertical125 * @return {!WebInspector.ResizerWidget}126 */127 _createResizer: function(element, vertical)128 {129 var resizer = new WebInspector.ResizerWidget();130 resizer.addElement(element);131 resizer.setVertical(vertical);132 resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeStart, this._onResizeStart, this);133 resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeUpdate, this._onResizeUpdate, this);134 resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeEnd, this._onResizeEnd, this);135 return resizer;136 },137 /**138 * @param {!WebInspector.Event} event139 */140 _onResizeStart: function(event)141 {142 var available = this._availableDipSize();143 this._slowPositionStart = null;144 this._resizeStartSize = event.target.isVertical() ? (this._dipHeight || available.height) : (this._dipWidth || available.width);145 },146 /**147 * @param {!WebInspector.Event} event148 */149 _onResizeUpdate: function(event)150 {151 if (event.data.shiftKey !== !!this._slowPositionStart)152 this._slowPositionStart = event.data.shiftKey ? event.data.currentPosition : null;153 var cssOffset = this._slowPositionStart ? (event.data.currentPosition - this._slowPositionStart) / 10 + this._slowPositionStart - event.data.startPosition : event.data.currentPosition - event.data.startPosition;154 var dipOffset = Math.round(cssOffset * WebInspector.zoomManager.zoomFactor());155 var newSize = Math.max(this._resizeStartSize + dipOffset, 1);156 var requested = {};157 if (event.target.isVertical())158 requested.height = newSize;159 else160 requested.width = newSize;161 this.dispatchEventToListeners(WebInspector.OverridesSupport.PageResizer.Events.ResizeRequested, requested);162 },163 /**164 * @param {!WebInspector.Event} event165 */166 _onResizeEnd: function(event)167 {168 delete this._resizeStartSize;169 },170 /**171 * Draws canvas of the specified css size in DevTools page space.172 * Canvas contains grid and rulers.173 * @param {number} cssCanvasWidth174 * @param {number} cssCanvasHeight175 */176 _drawCanvas: function(cssCanvasWidth, cssCanvasHeight)177 {178 if (!this._enabled)179 return;180 var canvas = this._canvas;181 var context = canvas.getContext("2d");182 canvas.style.width = cssCanvasWidth + "px";183 canvas.style.height = cssCanvasHeight + "px";184 var zoomFactor = WebInspector.zoomManager.zoomFactor();185 var dipCanvasWidth = cssCanvasWidth * zoomFactor;186 var dipCanvasHeight = cssCanvasHeight * zoomFactor;187 var deviceScaleFactor = window.devicePixelRatio;188 canvas.width = deviceScaleFactor * cssCanvasWidth;189 canvas.height = deviceScaleFactor * cssCanvasHeight;190 context.scale(canvas.width / dipCanvasWidth, canvas.height / dipCanvasHeight);191 context.font = "11px " + WebInspector.fontFamily();192 const rulerStep = 100;193 const rulerSubStep = 5;194 const gridStep = 50;195 const gridSubStep = 10;196 const rulerBackgroundColor = "rgb(0, 0, 0)";197 const backgroundColor = "rgb(102, 102, 102)";198 const lightLineColor = "rgb(132, 132, 132)";199 const darkLineColor = "rgb(114, 114, 114)";200 const rulerColor = "rgb(125, 125, 125)";201 const textColor = "rgb(186, 186, 186)";202 var scale = this._scale || 1;203 var rulerWidth = WebInspector.ResponsiveDesignView.RulerWidth;204 var dipGridWidth = dipCanvasWidth / scale - rulerWidth;205 var dipGridHeight = dipCanvasHeight / scale - rulerWidth;206 rulerWidth /= scale;207 context.scale(scale, scale);208 context.translate(rulerWidth, rulerWidth);209 context.fillStyle = rulerBackgroundColor;210 context.fillRect(-rulerWidth, -rulerWidth, dipGridWidth + rulerWidth, rulerWidth);211 context.fillRect(-rulerWidth, 0, rulerWidth, dipGridHeight);212 context.fillStyle = backgroundColor;213 context.fillRect(0, 0, dipGridWidth, dipGridHeight);214 context.translate(0.5, 0.5);215 context.strokeStyle = rulerColor;216 context.fillStyle = textColor;217 context.lineWidth = 1;218 // Draw vertical ruler.219 for (var x = 0; x < dipGridWidth; x += rulerSubStep) {220 var y = -rulerWidth / 4;221 if (!(x % (rulerStep / 4)))222 y = -rulerWidth / 2;223 if (!(x % (rulerStep / 2)))224 y = -rulerWidth + 2;225 if (!(x % rulerStep)) {226 context.save();227 context.translate(x, 0);228 context.fillText(x, 2, -rulerWidth / 2);229 context.restore();230 y = -rulerWidth;231 }232 context.beginPath();233 context.moveTo(x, y);234 context.lineTo(x, 0);235 context.stroke();236 }237 // Draw horizontal ruler.238 for (var y = 0; y < dipGridHeight; y += rulerSubStep) {239 x = -rulerWidth / 4;240 if (!(y % (rulerStep / 4)))241 x = -rulerWidth / 2;242 if (!(y % (rulerStep / 2)))243 x = -rulerWidth + 2;244 if (!(y % rulerStep)) {245 context.save();246 context.translate(0, y);247 context.rotate(-Math.PI / 2);248 context.fillText(y, 2, -rulerWidth / 2);249 context.restore();250 x = -rulerWidth;251 }252 context.beginPath();253 context.moveTo(x, y);254 context.lineTo(0, y);255 context.stroke();256 }257 // Draw grid.258 drawGrid(darkLineColor, gridSubStep);259 drawGrid(lightLineColor, gridStep);260 /**261 * @param {string} color262 * @param {number} step263 */264 function drawGrid(color, step)265 {266 context.strokeStyle = color;267 for (var x = 0; x < dipGridWidth; x += step) {268 context.beginPath();269 context.moveTo(x, 0);270 context.lineTo(x, dipGridHeight);271 context.stroke();272 }273 for (var y = 0; y < dipGridHeight; y += step) {274 context.beginPath();275 context.moveTo(0, y);276 context.lineTo(dipGridWidth, y);277 context.stroke();278 }279 }280 },281 _updateUI: function()282 {283 if (!this._enabled || !this.isShowing())284 return;285 var zoomFactor = WebInspector.zoomManager.zoomFactor();286 var rect = this._canvas.parentElement.getBoundingClientRect();287 var availableDip = this._availableDipSize();288 var cssCanvasWidth = rect.width;289 var cssCanvasHeight = rect.height;290 this._widthSlider.classList.toggle("hidden", !!this._scale);291 this._heightSlider.classList.toggle("hidden", !!this._scale);292 this._widthSlider.classList.toggle("reversed", !this._dipWidth);293 this._heightSlider.classList.toggle("reversed", !this._dipHeight);294 if (this._cachedZoomFactor !== zoomFactor) {295 var cssRulerWidth = WebInspector.ResponsiveDesignView.RulerWidth / zoomFactor + "px";296 this._rulerGlasspane.style.height = cssRulerWidth;297 this._rulerGlasspane.style.left = cssRulerWidth;298 this._slidersContainer.style.left = cssRulerWidth;299 this._mediaInspector.translateZero(WebInspector.ResponsiveDesignView.RulerWidth / zoomFactor);300 this._slidersContainer.style.top = cssRulerWidth;301 this._warningMessage.style.height = cssRulerWidth;302 var cssSliderWidth = WebInspector.ResponsiveDesignView.SliderWidth / zoomFactor + "px";303 this._heightSliderContainer.style.flexBasis = cssSliderWidth;304 this._heightSliderContainer.style.marginBottom = "-" + cssSliderWidth;305 this._widthSliderContainer.style.flexBasis = cssSliderWidth;306 this._widthSliderContainer.style.marginRight = "-" + cssSliderWidth;307 }308 var cssWidth = this._dipWidth ? (this._dipWidth / zoomFactor + "px") : (availableDip.width / zoomFactor + "px");309 var cssHeight = this._dipHeight ? (this._dipHeight / zoomFactor + "px") : (availableDip.height / zoomFactor + "px");310 if (this._cachedCssWidth !== cssWidth || this._cachedCssHeight !== cssHeight) {311 this._slidersContainer.style.width = cssWidth;312 this._slidersContainer.style.height = cssHeight;313 this._inspectedPagePlaceholder.onResize();314 }315 if (this._cachedScale !== this._scale || this._cachedCssCanvasWidth !== cssCanvasWidth || this._cachedCssCanvasHeight !== cssCanvasHeight || this._cachedZoomFactor !== zoomFactor)316 this._drawCanvas(cssCanvasWidth, cssCanvasHeight);317 this._cachedScale = this._scale;318 this._cachedCssCanvasWidth = cssCanvasWidth;319 this._cachedCssCanvasHeight = cssCanvasHeight;320 this._cachedCssHeight = cssHeight;321 this._cachedCssWidth = cssWidth;322 this._cachedZoomFactor = zoomFactor;323 },324 onResize: function()325 {326 if (!this._enabled || this._ignoreResize)327 return;328 var oldSize = this._availableSize;329 delete this._availableSize;330 var newSize = this._availableDipSize();331 if (!newSize.isEqual(oldSize))332 this.dispatchEventToListeners(WebInspector.OverridesSupport.PageResizer.Events.AvailableSizeChanged, newSize);333 this._updateUI();334 this._inspectedPagePlaceholder.onResize();335 },336 _onZoomChanged: function()337 {338 this._updateUI();339 },340 _createToolbar: function()341 {342 this._toolbarElement = this._responsiveDesignContainer.element.createChild("div", "responsive-design-toolbar");343 this._createButtonsSection();344 this._toolbarElement.createChild("div", "responsive-design-separator");345 this._createDeviceSection();346 if (WebInspector.experimentsSettings.networkConditions.isEnabled()) {347 this._toolbarElement.createChild("div", "responsive-design-separator");348 this._createNetworkSection();349 }350 this._toolbarElement.createChild("div", "responsive-design-separator");351 var moreButtonContainer = this._toolbarElement.createChild("div", "responsive-design-more-button-container");352 var moreButton = moreButtonContainer.createChild("button", "responsive-design-more-button");353 moreButton.title = WebInspector.UIString("More overrides");354 moreButton.addEventListener("click", this._showEmulationInDrawer.bind(this), false);355 moreButton.textContent = "\u2026";356 },357 _createButtonsSection: function()358 {359 var buttonsSection = this._toolbarElement.createChild("div", "responsive-design-section responsive-design-section-buttons");360 var resetButton = new WebInspector.StatusBarButton(WebInspector.UIString("Reset all overrides."), "clear-status-bar-item");361 buttonsSection.appendChild(resetButton.element);362 resetButton.addEventListener("click", WebInspector.overridesSupport.reset, WebInspector.overridesSupport);363 // Media Query Inspector.364 this._toggleMediaInspectorButton = new WebInspector.StatusBarButton(WebInspector.UIString("Media queries."), "responsive-design-toggle-media-inspector");365 this._toggleMediaInspectorButton.toggled = WebInspector.settings.showMediaQueryInspector.get();366 this._toggleMediaInspectorButton.addEventListener("click", this._onToggleMediaInspectorButtonClick, this);367 WebInspector.settings.showMediaQueryInspector.addChangeListener(this._updateMediaQueryInspector, this);368 buttonsSection.appendChild(this._toggleMediaInspectorButton.element);369 },370 _createDeviceSection: function()371 {372 var deviceSection = this._toolbarElement.createChild("div", "responsive-design-section responsive-design-section-device");373 // Device.374 var deviceElement = deviceSection.createChild("div", "responsive-design-suite responsive-design-suite-top").createChild("div");375 var fieldsetElement = deviceElement.createChild("fieldset");376 fieldsetElement.createChild("label").textContent = WebInspector.UIString("Device");377 fieldsetElement.appendChild(WebInspector.overridesSupport.createDeviceSelect(document));378 var separator = deviceSection.createChild("div", "responsive-design-section-separator");379 var detailsElement = deviceSection.createChild("div", "responsive-design-suite");380 // Dimensions.381 var screenElement = detailsElement.createChild("div", "");382 fieldsetElement = screenElement.createChild("fieldset");383 var resolutionButton = new WebInspector.StatusBarButton(WebInspector.UIString("Screen resolution"), "responsive-design-icon responsive-design-icon-resolution");384 resolutionButton.setEnabled(false);385 fieldsetElement.appendChild(resolutionButton.element);386 fieldsetElement.appendChild(WebInspector.SettingsUI.createSettingInputField("", WebInspector.overridesSupport.settings.deviceWidth, true, 4, "3em", WebInspector.OverridesSupport.deviceSizeValidator, true, true, WebInspector.UIString("\u2013")));387 fieldsetElement.appendChild(document.createTextNode(" \u00D7 "));388 fieldsetElement.appendChild(WebInspector.SettingsUI.createSettingInputField("", WebInspector.overridesSupport.settings.deviceHeight, true, 4, "3em", WebInspector.OverridesSupport.deviceSizeValidator, true, true, WebInspector.UIString("\u2013")));389 var swapButton = new WebInspector.StatusBarButton(WebInspector.UIString("Swap dimensions"), "responsive-design-icon responsive-design-icon-swap");390 swapButton.element.tabIndex = -1;391 swapButton.addEventListener("click", WebInspector.overridesSupport.swapDimensions, WebInspector.overridesSupport);392 fieldsetElement.appendChild(swapButton.element);393 // Device pixel ratio.394 detailsElement.createChild("div", "responsive-design-suite-separator");395 var dprElement = detailsElement.createChild("div", "");396 fieldsetElement = dprElement.createChild("fieldset");397 var dprButton = new WebInspector.StatusBarButton(WebInspector.UIString("Device pixel ratio"), "responsive-design-icon responsive-design-icon-dpr");398 dprButton.setEnabled(false);399 fieldsetElement.appendChild(dprButton.element);400 fieldsetElement.appendChild(WebInspector.SettingsUI.createSettingInputField("", WebInspector.overridesSupport.settings.deviceScaleFactor, true, 4, "2.5em", WebInspector.OverridesSupport.deviceScaleFactorValidator, true, true, WebInspector.UIString("\u2013")));401 },402 _createNetworkSection: function()403 {404 var networkSection = this._toolbarElement.createChild("div", "responsive-design-section responsive-design-section-network");405 // Bandwidth.406 var bandwidthElement = networkSection.createChild("div", "responsive-design-suite responsive-design-suite-top").createChild("div");407 var fieldsetElement = bandwidthElement.createChild("fieldset");408 var networkCheckbox = fieldsetElement.createChild("label");409 networkCheckbox.textContent = WebInspector.UIString("Network");410 fieldsetElement.appendChild(WebInspector.overridesSupport.createNetworkThroughputSelect(document));411 var separator = networkSection.createChild("div", "responsive-design-section-separator");412 // User agent.413 var userAgentElement = networkSection.createChild("div", "responsive-design-suite").createChild("div");414 fieldsetElement = userAgentElement.createChild("fieldset");415 fieldsetElement.appendChild(WebInspector.SettingsUI.createSettingInputField("UA", WebInspector.overridesSupport.settings.userAgent, false, 0, "", undefined, false, false, WebInspector.UIString("No override")));416 },417 _onToggleMediaInspectorButtonClick: function()418 {419 WebInspector.settings.showMediaQueryInspector.set(!this._toggleMediaInspectorButton.toggled);420 },421 _updateMediaQueryInspector: function()422 {423 this._toggleMediaInspectorButton.toggled = WebInspector.settings.showMediaQueryInspector.get();424 if (this._mediaInspector.isShowing() === WebInspector.settings.showMediaQueryInspector.get())425 return;426 if (this._mediaInspector.isShowing())427 this._mediaInspector.detach();428 else...
SensorsView.js
Source:SensorsView.js
...12 this._geolocationSetting = Common.settings.createSetting('emulation.geolocationOverride', '');13 this._geolocation = Emulation.Geolocation.parseSetting(this._geolocationSetting.get());14 this._geolocationOverrideEnabled = false;15 this._createGeolocationSection(this._geolocation);16 this.contentElement.createChild('div').classList.add('panel-section-separator');17 this._deviceOrientationSetting = Common.settings.createSetting('emulation.deviceOrientationOverride', '');18 this._deviceOrientation = Emulation.DeviceOrientation.parseSetting(this._deviceOrientationSetting.get());19 this._deviceOrientationOverrideEnabled = false;20 this._createDeviceOrientationSection();21 this.contentElement.createChild('div').classList.add('panel-section-separator');22 this._appendTouchControl();23 }24 /**25 * @return {!Emulation.SensorsView}26 */27 static instance() {28 if (!Emulation.SensorsView._instanceObject)29 Emulation.SensorsView._instanceObject = new Emulation.SensorsView();30 return Emulation.SensorsView._instanceObject;31 }32 /**33 * @param {!Emulation.Geolocation} geolocation34 */35 _createGeolocationSection(geolocation) {36 var geogroup = this.contentElement.createChild('section', 'sensors-group');37 geogroup.createChild('div', 'sensors-group-title').textContent = Common.UIString('Geolocation');38 var fields = geogroup.createChild('div', 'geo-fields');39 const noOverrideOption = {40 title: Common.UIString('No override'),41 location: Emulation.SensorsView.NonPresetOptions.NoOverride42 };43 const customLocationOption = {44 title: Common.UIString('Custom location...'),45 location: Emulation.SensorsView.NonPresetOptions.Custom46 };47 this._locationSelectElement = this.contentElement.createChild('select', 'chrome-select');48 this._locationSelectElement.appendChild(new Option(noOverrideOption.title, noOverrideOption.location));49 this._locationSelectElement.appendChild(new Option(customLocationOption.title, customLocationOption.location));50 var locationGroups = Emulation.SensorsView.PresetLocations;51 for (var i = 0; i < locationGroups.length; ++i) {52 var group = locationGroups[i].value;53 var groupElement = this._locationSelectElement.createChild('optgroup');54 groupElement.label = locationGroups[i].title;55 for (var j = 0; j < group.length; ++j)56 groupElement.appendChild(new Option(group[j].title, group[j].location));57 }58 this._locationSelectElement.selectedIndex = 0;59 fields.appendChild(this._locationSelectElement);60 this._locationSelectElement.addEventListener('change', this._geolocationSelectChanged.bind(this));61 // Validated input fieldset.62 this._fieldsetElement = fields.createChild('fieldset');63 this._fieldsetElement.disabled = !this._geolocationOverrideEnabled;64 this._fieldsetElement.id = 'geolocation-override-section';65 var latitudeGroup = this._fieldsetElement.createChild('div', 'latlong-group');66 var longitudeGroup = this._fieldsetElement.createChild('div', 'latlong-group');67 this._latitudeInput = latitudeGroup.createChild('input');68 this._latitudeInput.setAttribute('type', 'number');69 this._latitudeInput.value = 0;70 this._latitudeSetter = UI.bindInput(71 this._latitudeInput, this._applyGeolocationUserInput.bind(this), Emulation.Geolocation.latitudeValidator, true);72 this._latitudeSetter(String(geolocation.latitude));73 this._longitudeInput = longitudeGroup.createChild('input');74 this._longitudeInput.setAttribute('type', 'number');75 this._longitudeInput.value = 0;76 this._longitudeSetter = UI.bindInput(77 this._longitudeInput, this._applyGeolocationUserInput.bind(this), Emulation.Geolocation.longitudeValidator,78 true);79 this._longitudeSetter(String(geolocation.longitude));80 latitudeGroup.createChild('div', 'latlong-title').textContent = Common.UIString('Latitude');81 longitudeGroup.createChild('div', 'latlong-title').textContent = Common.UIString('Longitude');82 }83 _geolocationSelectChanged() {84 this._fieldsetElement.disabled = false;85 var value = this._locationSelectElement.options[this._locationSelectElement.selectedIndex].value;86 if (value === Emulation.SensorsView.NonPresetOptions.NoOverride) {87 this._geolocationOverrideEnabled = false;88 this._fieldsetElement.disabled = true;89 } else if (value === Emulation.SensorsView.NonPresetOptions.Custom) {90 this._geolocationOverrideEnabled = true;91 } else if (value === Emulation.SensorsView.NonPresetOptions.Unavailable) {92 this._geolocationOverrideEnabled = true;93 this._geolocation = new Emulation.Geolocation(0, 0, true);94 } else {95 this._geolocationOverrideEnabled = true;96 var coordinates = JSON.parse(value);97 this._geolocation = new Emulation.Geolocation(coordinates[0], coordinates[1], false);98 this._latitudeSetter(coordinates[0]);99 this._longitudeSetter(coordinates[1]);100 }101 this._applyGeolocation();102 if (value === Emulation.SensorsView.NonPresetOptions.Custom)103 this._latitudeInput.focus();104 }105 _applyGeolocationUserInput() {106 var geolocation =107 Emulation.Geolocation.parseUserInput(this._latitudeInput.value.trim(), this._longitudeInput.value.trim(), '');108 if (!geolocation)109 return;110 this._setSelectElementLabel(this._locationSelectElement, Emulation.SensorsView.NonPresetOptions.Custom);111 this._geolocation = geolocation;112 this._applyGeolocation();113 }114 _applyGeolocation() {115 if (this._geolocationOverrideEnabled) {116 this._geolocationSetting.set(this._geolocation.toSetting());117 this._geolocation.apply();118 } else {119 this._geolocation.clear();120 }121 }122 _createDeviceOrientationSection() {123 var orientationGroup = this.contentElement.createChild('section', 'sensors-group');124 orientationGroup.createChild('div', 'sensors-group-title').textContent = Common.UIString('Orientation');125 var orientationContent = orientationGroup.createChild('div', 'orientation-content');126 var fields = orientationContent.createChild('div', 'orientation-fields');127 const orientationOffOption = {128 title: Common.UIString('Off'),129 orientation: Emulation.SensorsView.NonPresetOptions.NoOverride130 };131 const customOrientationOption = {132 title: Common.UIString('Custom orientation...'),133 orientation: Emulation.SensorsView.NonPresetOptions.Custom134 };135 this._orientationSelectElement = this.contentElement.createChild('select', 'chrome-select');136 this._orientationSelectElement.appendChild(137 new Option(orientationOffOption.title, orientationOffOption.orientation));138 this._orientationSelectElement.appendChild(139 new Option(customOrientationOption.title, customOrientationOption.orientation));140 var orientationGroups = Emulation.SensorsView.PresetOrientations;141 for (var i = 0; i < orientationGroups.length; ++i) {142 var groupElement = this._orientationSelectElement.createChild('optgroup');143 groupElement.label = orientationGroups[i].title;144 var group = orientationGroups[i].value;145 for (var j = 0; j < group.length; ++j)146 groupElement.appendChild(new Option(group[j].title, group[j].orientation));147 }148 this._orientationSelectElement.selectedIndex = 0;149 fields.appendChild(this._orientationSelectElement);150 this._orientationSelectElement.addEventListener('change', this._orientationSelectChanged.bind(this));151 this._deviceOrientationFieldset = this._createDeviceOrientationOverrideElement(this._deviceOrientation);152 this._stageElement = orientationContent.createChild('div', 'orientation-stage');153 this._stageElement.title = Common.UIString('Shift+drag horizontally to rotate around the y-axis');154 this._orientationLayer = this._stageElement.createChild('div', 'orientation-layer');155 this._boxElement = this._orientationLayer.createChild('section', 'orientation-box orientation-element');156 this._boxElement.createChild('section', 'orientation-front orientation-element');157 this._boxElement.createChild('section', 'orientation-top orientation-element');158 this._boxElement.createChild('section', 'orientation-back orientation-element');159 this._boxElement.createChild('section', 'orientation-left orientation-element');160 this._boxElement.createChild('section', 'orientation-right orientation-element');161 this._boxElement.createChild('section', 'orientation-bottom orientation-element');162 UI.installDragHandle(163 this._stageElement, this._onBoxDragStart.bind(this), this._onBoxDrag.bind(this), null, '-webkit-grabbing',164 '-webkit-grab');165 fields.appendChild(this._deviceOrientationFieldset);166 this._enableOrientationFields(true);167 this._setBoxOrientation(this._deviceOrientation, false);168 }169 /**170 * @param {?boolean} disable171 */172 _enableOrientationFields(disable) {173 if (disable) {174 this._deviceOrientationFieldset.disabled = true;175 this._stageElement.classList.add('disabled');176 } else {177 this._deviceOrientationFieldset.disabled = false;178 this._stageElement.classList.remove('disabled');179 }180 }181 _orientationSelectChanged() {182 var value = this._orientationSelectElement.options[this._orientationSelectElement.selectedIndex].value;183 this._enableOrientationFields(false);184 if (value === Emulation.SensorsView.NonPresetOptions.NoOverride) {185 this._deviceOrientationOverrideEnabled = false;186 this._enableOrientationFields(true);187 } else if (value === Emulation.SensorsView.NonPresetOptions.Custom) {188 this._deviceOrientationOverrideEnabled = true;189 this._alphaElement.focus();190 } else {191 var parsedValue = JSON.parse(value);192 this._deviceOrientationOverrideEnabled = true;193 this._deviceOrientation = new Emulation.DeviceOrientation(parsedValue[0], parsedValue[1], parsedValue[2]);194 this._setDeviceOrientation(195 this._deviceOrientation, Emulation.SensorsView.DeviceOrientationModificationSource.SelectPreset);196 }197 }198 _applyDeviceOrientation() {199 if (this._deviceOrientationOverrideEnabled) {200 this._deviceOrientationSetting.set(this._deviceOrientation.toSetting());201 this._deviceOrientation.apply();202 } else {203 this._deviceOrientation.clear();204 }205 }206 /**207 * @param {!Element} selectElement208 * @param {string} labelValue209 */210 _setSelectElementLabel(selectElement, labelValue) {211 var optionValues = Array.prototype.map.call(selectElement.options, x => x.value);212 selectElement.selectedIndex = optionValues.indexOf(labelValue);213 }214 _applyDeviceOrientationUserInput() {215 this._setDeviceOrientation(216 Emulation.DeviceOrientation.parseUserInput(217 this._alphaElement.value.trim(), this._betaElement.value.trim(), this._gammaElement.value.trim()),218 Emulation.SensorsView.DeviceOrientationModificationSource.UserInput);219 this._setSelectElementLabel(this._orientationSelectElement, Emulation.SensorsView.NonPresetOptions.Custom);220 }221 _resetDeviceOrientation() {222 this._setDeviceOrientation(223 new Emulation.DeviceOrientation(0, 90, 0),224 Emulation.SensorsView.DeviceOrientationModificationSource.ResetButton);225 this._setSelectElementLabel(this._orientationSelectElement, '[0, 90, 0]');226 }227 /**228 * @param {?Emulation.DeviceOrientation} deviceOrientation229 * @param {!Emulation.SensorsView.DeviceOrientationModificationSource} modificationSource230 */231 _setDeviceOrientation(deviceOrientation, modificationSource) {232 if (!deviceOrientation)233 return;234 /**235 * @param {number} angle236 * @return {number}237 */238 function roundAngle(angle) {239 return Math.round(angle * 10000) / 10000;240 }241 if (modificationSource !== Emulation.SensorsView.DeviceOrientationModificationSource.UserInput) {242 this._alphaSetter(roundAngle(deviceOrientation.alpha));243 this._betaSetter(roundAngle(deviceOrientation.beta));244 this._gammaSetter(roundAngle(deviceOrientation.gamma));245 }246 var animate = modificationSource !== Emulation.SensorsView.DeviceOrientationModificationSource.UserDrag;247 this._setBoxOrientation(deviceOrientation, animate);248 this._deviceOrientation = deviceOrientation;249 this._applyDeviceOrientation();250 }251 /**252 * @param {!Element} parentElement253 * @param {!Element} input254 * @param {string} label255 * @return {function(string)}256 */257 _createAxisInput(parentElement, input, label) {258 var div = parentElement.createChild('div', 'orientation-axis-input-container');259 div.appendChild(input);260 div.createTextChild(label);261 input.type = 'number';262 return UI.bindInput(263 input, this._applyDeviceOrientationUserInput.bind(this), Emulation.DeviceOrientation.validator, true);264 }265 /**266 * @param {!Emulation.DeviceOrientation} deviceOrientation267 * @return {!Element}268 */269 _createDeviceOrientationOverrideElement(deviceOrientation) {270 var fieldsetElement = createElement('fieldset');271 fieldsetElement.classList.add('device-orientation-override-section');272 var cellElement = fieldsetElement.createChild('td', 'orientation-inputs-cell');273 this._alphaElement = createElement('input');274 this._alphaSetter = this._createAxisInput(cellElement, this._alphaElement, Common.UIString('\u03B1 (alpha)'));275 this._alphaSetter(String(deviceOrientation.alpha));276 this._betaElement = createElement('input');277 this._betaSetter = this._createAxisInput(cellElement, this._betaElement, Common.UIString('\u03B2 (beta)'));278 this._betaSetter(String(deviceOrientation.beta));279 this._gammaElement = createElement('input');280 this._gammaSetter = this._createAxisInput(cellElement, this._gammaElement, Common.UIString('\u03B3 (gamma)'));281 this._gammaSetter(String(deviceOrientation.gamma));282 cellElement.appendChild(createTextButton(283 Common.UIString('Reset'), this._resetDeviceOrientation.bind(this), 'orientation-reset-button'));284 return fieldsetElement;285 }286 /**287 * @param {!Emulation.DeviceOrientation} deviceOrientation288 * @param {boolean} animate289 */290 _setBoxOrientation(deviceOrientation, animate) {291 if (animate)292 this._stageElement.classList.add('is-animating');293 else294 this._stageElement.classList.remove('is-animating');295 // The CSS transform should not depend on matrix3d, which does not interpolate well.296 var matrix = new WebKitCSSMatrix();297 this._boxMatrix = matrix.rotate(-deviceOrientation.beta, deviceOrientation.gamma, -deviceOrientation.alpha);298 var eulerAngles =299 new Common.Geometry.EulerAngles(deviceOrientation.alpha, deviceOrientation.beta, deviceOrientation.gamma);300 this._orientationLayer.style.transform = eulerAngles.toRotate3DString();301 }302 /**303 * @param {!MouseEvent} event304 * @return {boolean}305 */306 _onBoxDrag(event) {307 var mouseMoveVector = this._calculateRadiusVector(event.x, event.y);308 if (!mouseMoveVector)309 return true;310 event.consume(true);311 var axis, angle;312 if (event.shiftKey) {313 axis = new Common.Geometry.Vector(0, 0, -1);314 angle = (this._mouseDownVector.x - mouseMoveVector.x) * Emulation.SensorsView.ShiftDragOrientationSpeed;315 } else {316 axis = Common.Geometry.crossProduct(this._mouseDownVector, mouseMoveVector);317 angle = Common.Geometry.calculateAngle(this._mouseDownVector, mouseMoveVector);318 }319 // The mouse movement vectors occur in the screen space, which is offset by 90 degrees from320 // the actual device orientation.321 var currentMatrix = new WebKitCSSMatrix();322 currentMatrix = currentMatrix.rotate(-90, 0, 0)323 .rotateAxisAngle(axis.x, axis.y, axis.z, angle)324 .rotate(90, 0, 0)325 .multiply(this._originalBoxMatrix);326 var eulerAngles = Common.Geometry.EulerAngles.fromRotationMatrix(currentMatrix);327 var newOrientation = new Emulation.DeviceOrientation(-eulerAngles.alpha, -eulerAngles.beta, eulerAngles.gamma);328 this._setDeviceOrientation(newOrientation, Emulation.SensorsView.DeviceOrientationModificationSource.UserDrag);329 this._setSelectElementLabel(this._orientationSelectElement, Emulation.SensorsView.NonPresetOptions.Custom);330 return false;331 }332 /**333 * @param {!MouseEvent} event334 * @return {boolean}335 */336 _onBoxDragStart(event) {337 if (!this._deviceOrientationOverrideEnabled)338 return false;339 this._mouseDownVector = this._calculateRadiusVector(event.x, event.y);340 this._originalBoxMatrix = this._boxMatrix;341 if (!this._mouseDownVector)342 return false;343 event.consume(true);344 return true;345 }346 /**347 * @param {number} x348 * @param {number} y349 * @return {?Common.Geometry.Vector}350 */351 _calculateRadiusVector(x, y) {352 var rect = this._stageElement.getBoundingClientRect();353 var radius = Math.max(rect.width, rect.height) / 2;354 var sphereX = (x - rect.left - rect.width / 2) / radius;355 var sphereY = (y - rect.top - rect.height / 2) / radius;356 var sqrSum = sphereX * sphereX + sphereY * sphereY;357 if (sqrSum > 0.5)358 return new Common.Geometry.Vector(sphereX, sphereY, 0.5 / Math.sqrt(sqrSum));359 return new Common.Geometry.Vector(sphereX, sphereY, Math.sqrt(1 - sqrSum));360 }361 _appendTouchControl() {362 var groupElement = this.contentElement.createChild('div', 'sensors-group');363 var title = groupElement.createChild('div', 'sensors-group-title');364 var fieldsElement = groupElement.createChild('div', 'sensors-group-fields');365 title.textContent = Common.UIString('Touch');366 var select = fieldsElement.createChild('select', 'chrome-select');367 select.appendChild(new Option(Common.UIString('Device-based'), 'auto'));368 select.appendChild(new Option(Common.UIString('Force enabled'), 'enabled'));369 select.addEventListener('change', applyTouch, false);370 function applyTouch() {371 Emulation.MultitargetTouchModel.instance().setCustomTouchEnabled(select.value === 'enabled');372 }373 }374};375/** @enum {string} */376Emulation.SensorsView.DeviceOrientationModificationSource = {377 UserInput: 'userInput',378 UserDrag: 'userDrag',379 ResetButton: 'resetButton',380 SelectPreset: 'selectPreset'...
RequestTimingView.js
Source:RequestTimingView.js
...166 * @return {!Element}167 */168 static createTimingTable(request, navigationStart) {169 var tableElement = createElementWithClass('table', 'network-timing-table');170 var colgroup = tableElement.createChild('colgroup');171 colgroup.createChild('col', 'labels');172 colgroup.createChild('col', 'bars');173 colgroup.createChild('col', 'duration');174 var timeRanges = Network.RequestTimingView.calculateRequestTimeRanges(request, navigationStart);175 var startTime = timeRanges.map(r => r.start).reduce((a, b) => Math.min(a, b));176 var endTime = timeRanges.map(r => r.end).reduce((a, b) => Math.max(a, b));177 var scale = 100 / (endTime - startTime);178 var connectionHeader;179 var dataHeader;180 var totalDuration = 0;181 for (var i = 0; i < timeRanges.length; ++i) {182 var range = timeRanges[i];183 var rangeName = range.name;184 if (rangeName === Network.RequestTimeRangeNames.Total) {185 totalDuration = range.end - range.start;186 continue;187 }188 if (rangeName === Network.RequestTimeRangeNames.Push) {189 createHeader(Common.UIString('Server Push'));190 } else if (Network.RequestTimingView.ConnectionSetupRangeNames.has(rangeName)) {191 if (!connectionHeader)192 connectionHeader = createHeader(Common.UIString('Connection Setup'));193 } else {194 if (!dataHeader)195 dataHeader = createHeader(Common.UIString('Request/Response'));196 }197 var left = (scale * (range.start - startTime));198 var right = (scale * (endTime - range.end));199 var duration = range.end - range.start;200 var tr = tableElement.createChild('tr');201 tr.createChild('td').createTextChild(Network.RequestTimingView._timeRangeTitle(rangeName));202 var row = tr.createChild('td').createChild('div', 'network-timing-row');203 var bar = row.createChild('span', 'network-timing-bar ' + rangeName);204 bar.style.left = left + '%';205 bar.style.right = right + '%';206 bar.textContent = '\u200B'; // Important for 0-time items to have 0 width.207 var label = tr.createChild('td').createChild('div', 'network-timing-bar-title');208 label.textContent = Number.secondsToString(duration, true);209 }210 if (!request.finished) {211 var cell = tableElement.createChild('tr').createChild('td', 'caution');212 cell.colSpan = 3;213 cell.createTextChild(Common.UIString('CAUTION: request is not finished yet!'));214 }215 var footer = tableElement.createChild('tr', 'network-timing-footer');216 var note = footer.createChild('td');217 note.colSpan = 2;218 note.appendChild(UI.createDocumentationLink(219 'profile/network-performance/resource-loading#view-network-timing-details-for-a-specific-resource',220 Common.UIString('Explanation')));221 footer.createChild('td').createTextChild(Number.secondsToString(totalDuration, true));222 var serverTimings = request.serverTimings;223 if (!serverTimings)224 return tableElement;225 var lastTimingRightEdge = right === undefined ? 100 : right;226 var breakElement = tableElement.createChild('tr', 'network-timing-table-header').createChild('td');227 breakElement.colSpan = 3;228 breakElement.createChild('hr', 'break');229 var serverHeader = tableElement.createChild('tr', 'network-timing-table-header');230 serverHeader.createChild('td').createTextChild(Common.UIString('Server Timing'));231 serverHeader.createChild('td');232 serverHeader.createChild('td').createTextChild(Common.UIString('TIME'));233 serverTimings.filter(item => item.metric.toLowerCase() !== 'total')234 .forEach(item => addTiming(item, lastTimingRightEdge));235 serverTimings.filter(item => item.metric.toLowerCase() === 'total')236 .forEach(item => addTiming(item, lastTimingRightEdge));237 return tableElement;238 /**239 * @param {!SDK.ServerTiming} serverTiming240 * @param {number} right241 */242 function addTiming(serverTiming, right) {243 var colorGenerator = new UI.FlameChart.ColorGenerator({min: 0, max: 360, count: 36}, {min: 50, max: 80}, 80);244 var isTotal = serverTiming.metric.toLowerCase() === 'total';245 var tr = tableElement.createChild('tr', isTotal ? 'network-timing-footer' : '');246 var metric = tr.createChild('td', 'network-timing-metric');247 metric.createTextChild(serverTiming.description || serverTiming.metric);248 var row = tr.createChild('td').createChild('div', 'network-timing-row');249 var left = scale * (endTime - startTime - serverTiming.value);250 if (serverTiming.value && left >= 0) { // don't chart values too big or too small251 var bar = row.createChild('span', 'network-timing-bar server-timing');252 bar.style.left = left + '%';253 bar.style.right = right + '%';254 bar.textContent = '\u200B'; // Important for 0-time items to have 0 width.255 if (!isTotal)256 bar.style.backgroundColor = colorGenerator.colorForID(serverTiming.metric);257 }258 var label = tr.createChild('td').createChild('div', 'network-timing-bar-title');259 if (typeof serverTiming.value === 'number') // a metric timing value is optional260 label.textContent = Number.secondsToString(serverTiming.value, true);261 }262 /**263 * param {string} title264 */265 function createHeader(title) {266 var dataHeader = tableElement.createChild('tr', 'network-timing-table-header');267 dataHeader.createChild('td').createTextChild(title);268 dataHeader.createChild('td').createTextChild('');269 dataHeader.createChild('td').createTextChild(Common.UIString('TIME'));270 return dataHeader;271 }272 }273 /**274 * @override275 */276 wasShown() {277 this._request.addEventListener(SDK.NetworkRequest.Events.TimingChanged, this._refresh, this);278 this._request.addEventListener(SDK.NetworkRequest.Events.FinishedLoading, this._refresh, this);279 this._calculator.addEventListener(Network.NetworkTimeCalculator.Events.BoundariesChanged, this._refresh, this);280 this._refresh();281 }282 /**283 * @override...
route.js
Source:route.js
...45 * @return {!settings.Route}46 * @private47 */48 createSection: function(path, section) {49 var route = this.createChild(path);50 route.section = section;51 return route;52 },53 /**54 * Returns true if this route matches or is an ancestor of the parameter.55 * @param {!settings.Route} route56 * @return {boolean}57 */58 contains: function(route) {59 for (var r = route; r != null; r = r.parent) {60 if (this == r)61 return true;62 }63 return false;64 },65 /**66 * Returns true if this route is a subpage of a section.67 * @return {boolean}68 */69 isSubpage: function() {70 return !!this.parent && !!this.section &&71 this.parent.section == this.section;72 },73 };74 // Abbreviated variable for easier definitions.75 var r = Route;76 // Root pages.77 r.BASIC = new Route('/');78 r.ADVANCED = new Route('/advanced');79 r.ABOUT = new Route('/help');80 // Navigable dialogs. These are the only non-section children of root pages.81 // These are disfavored. If we add anymore, we should add explicit support.82 r.IMPORT_DATA = r.BASIC.createChild('/importData');83 r.SIGN_OUT = r.BASIC.createChild('/signOut');84 r.CLEAR_BROWSER_DATA = r.ADVANCED.createChild('/clearBrowserData');85 r.RESET_DIALOG = r.ADVANCED.createChild('/resetProfileSettings');86 r.TRIGGERED_RESET_DIALOG =87 r.ADVANCED.createChild('/triggeredResetProfileSettings');88<if expr="chromeos">89 r.INTERNET = r.BASIC.createSection('/internet', 'internet');90 r.NETWORK_DETAIL = r.INTERNET.createChild('/networkDetail');91 r.KNOWN_NETWORKS = r.INTERNET.createChild('/knownNetworks');92</if>93 r.APPEARANCE = r.BASIC.createSection('/appearance', 'appearance');94 r.FONTS = r.APPEARANCE.createChild('/fonts');95 r.DEFAULT_BROWSER =96 r.BASIC.createSection('/defaultBrowser', 'defaultBrowser');97 r.SEARCH = r.BASIC.createSection('/search', 'search');98 r.SEARCH_ENGINES = r.SEARCH.createChild('/searchEngines');99 r.ON_STARTUP = r.BASIC.createSection('/onStartup', 'onStartup');100 r.PEOPLE = r.BASIC.createSection('/people', 'people');101 r.SYNC = r.PEOPLE.createChild('/syncSetup');102<if expr="not chromeos">103 r.MANAGE_PROFILE = r.PEOPLE.createChild('/manageProfile');104</if>105<if expr="chromeos">106 r.CHANGE_PICTURE = r.PEOPLE.createChild('/changePicture');107 r.ACCOUNTS = r.PEOPLE.createChild('/accounts');108 r.LOCK_SCREEN = r.PEOPLE.createChild('/lockScreen');109 r.DEVICE = r.BASIC.createSection('/device', 'device');110 r.POINTERS = r.DEVICE.createChild('/pointer-overlay');111 r.KEYBOARD = r.DEVICE.createChild('/keyboard-overlay');112 r.DISPLAY = r.DEVICE.createChild('/display');113 r.STYLUS = r.DEVICE.createChild('/stylus');114 r.STORAGE = r.DEVICE.createChild('/storage');115</if>116 r.PRIVACY = r.ADVANCED.createSection('/privacy', 'privacy');117 r.CERTIFICATES = r.PRIVACY.createChild('/certificates');118 r.SITE_SETTINGS = r.PRIVACY.createChild('/content');119 r.SITE_SETTINGS_ALL = r.SITE_SETTINGS.createChild('all');120 r.SITE_SETTINGS_SITE_DETAILS =121 r.SITE_SETTINGS_ALL.createChild('/content/siteDetails');122 r.SITE_SETTINGS_HANDLERS = r.SITE_SETTINGS.createChild('/handlers');123 // TODO(tommycli): Find a way to refactor these repetitive category routes.124 r.SITE_SETTINGS_AUTOMATIC_DOWNLOADS =125 r.SITE_SETTINGS.createChild('automaticDownloads');126 r.SITE_SETTINGS_BACKGROUND_SYNC =127 r.SITE_SETTINGS.createChild('backgroundSync');128 r.SITE_SETTINGS_CAMERA = r.SITE_SETTINGS.createChild('camera');129 r.SITE_SETTINGS_COOKIES = r.SITE_SETTINGS.createChild('cookies');130 r.SITE_SETTINGS_DATA_DETAILS =131 r.SITE_SETTINGS_COOKIES.createChild('/cookies/detail');132 r.SITE_SETTINGS_IMAGES = r.SITE_SETTINGS.createChild('images');133 r.SITE_SETTINGS_JAVASCRIPT = r.SITE_SETTINGS.createChild('javascript');134 r.SITE_SETTINGS_KEYGEN = r.SITE_SETTINGS.createChild('keygen');135 r.SITE_SETTINGS_LOCATION = r.SITE_SETTINGS.createChild('location');136 r.SITE_SETTINGS_MICROPHONE = r.SITE_SETTINGS.createChild('microphone');137 r.SITE_SETTINGS_NOTIFICATIONS = r.SITE_SETTINGS.createChild('notifications');138 r.SITE_SETTINGS_FLASH = r.SITE_SETTINGS.createChild('flash');139 r.SITE_SETTINGS_POPUPS = r.SITE_SETTINGS.createChild('popups');140 r.SITE_SETTINGS_UNSANDBOXED_PLUGINS =141 r.SITE_SETTINGS.createChild('unsandboxedPlugins');142 r.SITE_SETTINGS_USB_DEVICES = r.SITE_SETTINGS.createChild('usbDevices');143 r.SITE_SETTINGS_ZOOM_LEVELS = r.SITE_SETTINGS.createChild('zoomLevels');144 r.SITE_SETTINGS_PDF_DOCUMENTS = r.SITE_SETTINGS.createChild('pdfDocuments');145<if expr="chromeos">146 r.DATETIME = r.ADVANCED.createSection('/dateTime', 'dateTime');147 r.BLUETOOTH = r.ADVANCED.createSection('/bluetooth', 'bluetooth');148</if>149 r.PASSWORDS =150 r.ADVANCED.createSection('/passwordsAndForms', 'passwordsAndForms');151 r.AUTOFILL = r.PASSWORDS.createChild('/autofill');152 r.MANAGE_PASSWORDS = r.PASSWORDS.createChild('/passwords');153 r.LANGUAGES = r.ADVANCED.createSection('/languages', 'languages');154<if expr="chromeos">155 r.INPUT_METHODS = r.LANGUAGES.createChild('/inputMethods');156</if>157<if expr="not is_macosx">158 r.EDIT_DICTIONARY = r.LANGUAGES.createChild('/editDictionary');159</if>160 r.DOWNLOADS = r.ADVANCED.createSection('/downloads', 'downloads');161 r.PRINTING = r.ADVANCED.createSection('/printing', 'printing');162 r.CLOUD_PRINTERS = r.PRINTING.createChild('/cloudPrinters');163<if expr="chromeos">164 r.CUPS_PRINTERS = r.PRINTING.createChild('/cupsPrinters');165 r.CUPS_PRINTER_DETAIL = r.CUPS_PRINTERS.createChild('/cupsPrinterDetails');166</if>167 r.ACCESSIBILITY = r.ADVANCED.createSection('/accessibility', 'a11y');168 r.MANAGE_ACCESSIBILITY = r.ACCESSIBILITY.createChild('/manageAccessibility');169 r.SYSTEM = r.ADVANCED.createSection('/system', 'system');170 r.RESET = r.ADVANCED.createSection('/reset', 'reset');171<if expr="chromeos">172 // "About" is the only section in About, but we still need to create the route173 // in order to show the subpage on Chrome OS.174 r.ABOUT_ABOUT = r.ABOUT.createSection('/help/about', 'about');175 r.DETAILED_BUILD_INFO = r.ABOUT_ABOUT.createChild('/help/details');176</if>177 var routeObservers_ = new Set();178 /** @polymerBehavior */179 var RouteObserverBehavior = {180 /** @override */181 attached: function() {182 assert(!routeObservers_.has(this));183 routeObservers_.add(this);184 // Emulating Polymer data bindings, the observer is called when the185 // element starts observing the route.186 this.currentRouteChanged(currentRoute_, undefined);187 },188 /** @override */189 detached: function() {...
base.js
Source:base.js
...222 * ìë¦¬ë¨¼í¸ ê´ë ¨ ë©ìë (ê·¸ë¼ë°ì´ì
)223 *224 */225 this.stop = function(attr) {226 return this.createChild(new Element(), "stop", attr);227 }228 /**229 * ìë¦¬ë¨¼í¸ ê´ë ¨ ë©ìë (ì ëë©ì´ì
)230 *231 */232 this.animate = function(attr) {233 return this.createChild(new Element(), "animate", attr);234 }235 this.animateColor = function(attr) {236 return this.createChild(new Element(), "animateColor", attr);237 }238 this.animateMotion = function(attr) {239 return this.createChild(new Element(), "animateMotion", attr);240 }241 this.animateTransform = function(attr) {242 return this.createChild(new Element(), "animateTransform", attr);243 }244 this.mpath = function(attr) {245 return this.createChild(new Element(), "mpath", attr);246 }247 this.set = function(attr) {248 return this.createChild(new Element(), "set", attr);249 }250 /**251 * ìë¦¬ë¨¼í¸ ê´ë ¨ ë©ìë (íí°)252 *253 */254 this.feBlend = function(attr) {255 return this.createChild(new Element(), "feBlend", attr);256 }257 this.feColorMatrix = function(attr) {258 return this.createChild(new Element(), "feColorMatrix", attr);259 }260 this.feComponentTransfer = function(attr) {261 return this.createChild(new Element(), "feComponentTransfer", attr);262 }263 this.feComposite = function(attr) {264 return this.createChild(new Element(), "feComposite", attr);265 }266 this.feConvolveMatrix = function(attr) {267 return this.createChild(new Element(), "feConvolveMatrix", attr);268 }269 this.feDiffuseLighting = function(attr) {270 return this.createChild(new Element(), "feDiffuseLighting", attr);271 }272 this.feDisplacementMap = function(attr) {273 return this.createChild(new Element(), "feDisplacementMap", attr);274 }275 this.feFlood = function(attr) {276 return this.createChild(new Element(), "feFlood", attr);277 }278 this.feGaussianBlur = function(attr) {279 return this.createChild(new Element(), "feGaussianBlur", attr);280 }281 this.feImage = function(attr) {282 return this.createChild(new Element(), "feImage", attr);283 }284 this.feMerge = function(attr, callback) {285 return this.createChild(new Element(), "feMerge", attr, callback);286 }287 this.feMergeNode = function(attr) {288 return this.createChild(new Element(), "feMergeNode", attr);289 }290 this.feMorphology = function(attr) {291 return this.createChild(new Element(), "feMorphology", attr);292 }293 this.feOffset = function(attr) {294 return this.createChild(new Element(), "feOffset", attr);295 }296 this.feSpecularLighting = function(attr) {297 return this.createChild(new Element(), "feSpecularLighting", attr);298 }299 this.feTile = function(attr) {300 return this.createChild(new Element(), "feTile", attr);301 }302 this.feTurbulence = function(attr) {303 return this.createChild(new Element(), "feTurbulence", attr);304 }305 }306 SVGBase.create = function(name, attr, callback) {307 if(globalObj == null) {308 globalObj = new SVGBase();309 }310 return globalObj.custom(name, attr, callback);311 }312 return SVGBase;...
os_route.js
Source:os_route.js
...11 const r = {};12 // Root pages.13 r.BASIC = new settings.Route('/');14 r.ABOUT = new settings.Route('/help');15 r.SIGN_OUT = r.BASIC.createChild('/signOut');16 r.SIGN_OUT.isNavigableDialog = true;17 r.SEARCH = r.BASIC.createSection('/search', 'search');18 if (!loadTimeData.getBoolean('isGuest')) {19 r.PEOPLE = r.BASIC.createSection('/people', 'people');20 r.SYNC = r.PEOPLE.createChild('/syncSetup');21 if (!loadTimeData.getBoolean('splitSettingsSyncEnabled')) {22 r.SYNC_ADVANCED = r.SYNC.createChild('/syncSetup/advanced');23 }24 }25 r.INTERNET = r.BASIC.createSection('/internet', 'internet');26 r.INTERNET_NETWORKS = r.INTERNET.createChild('/networks');27 r.NETWORK_DETAIL = r.INTERNET.createChild('/networkDetail');28 r.KNOWN_NETWORKS = r.INTERNET.createChild('/knownNetworks');29 r.BLUETOOTH = r.BASIC.createSection('/bluetooth', 'bluetooth');30 r.BLUETOOTH_DEVICES = r.BLUETOOTH.createChild('/bluetoothDevices');31 r.DEVICE = r.BASIC.createSection('/device', 'device');32 r.POINTERS = r.DEVICE.createChild('/pointer-overlay');33 r.KEYBOARD = r.DEVICE.createChild('/keyboard-overlay');34 r.STYLUS = r.DEVICE.createChild('/stylus');35 r.DISPLAY = r.DEVICE.createChild('/display');36 r.STORAGE = r.DEVICE.createChild('/storage');37 r.EXTERNAL_STORAGE_PREFERENCES =38 r.DEVICE.createChild('/storage/externalStoragePreferences');39 r.POWER = r.DEVICE.createChild('/power');40 // "About" is the only section in About, but we still need to create the41 // route in order to show the subpage on Chrome OS.42 r.ABOUT_ABOUT = r.ABOUT.createSection('/help/about', 'about');43 r.DETAILED_BUILD_INFO = r.ABOUT_ABOUT.createChild('/help/details');44 if (!loadTimeData.getBoolean('isGuest')) {45 r.MULTIDEVICE = r.BASIC.createSection('/multidevice', 'multidevice');46 r.MULTIDEVICE_FEATURES =47 r.MULTIDEVICE.createChild('/multidevice/features');48 r.SMART_LOCK =49 r.MULTIDEVICE_FEATURES.createChild('/multidevice/features/smartLock');50 r.ACCOUNTS = r.PEOPLE.createChild('/accounts');51 r.ACCOUNT_MANAGER = r.PEOPLE.createChild('/accountManager');52 r.KERBEROS_ACCOUNTS = r.PEOPLE.createChild('/kerberosAccounts');53 r.LOCK_SCREEN = r.PEOPLE.createChild('/lockScreen');54 r.FINGERPRINT = r.LOCK_SCREEN.createChild('/lockScreen/fingerprint');55 }56 if (loadTimeData.valueExists('showCrostini') &&57 loadTimeData.getBoolean('showCrostini')) {58 r.CROSTINI = r.BASIC.createSection('/crostini', 'crostini');59 r.CROSTINI_ANDROID_ADB = r.CROSTINI.createChild('/crostini/androidAdb');60 r.CROSTINI_DETAILS = r.CROSTINI.createChild('/crostini/details');61 if (loadTimeData.valueExists('showCrostiniExportImport') &&62 loadTimeData.getBoolean('showCrostiniExportImport')) {63 r.CROSTINI_EXPORT_IMPORT =64 r.CROSTINI_DETAILS.createChild('/crostini/exportImport');65 }66 r.CROSTINI_PORT_FORWARDING =67 r.CROSTINI_DETAILS.createChild('/crostini/portForwarding');68 r.CROSTINI_SHARED_PATHS =69 r.CROSTINI_DETAILS.createChild('/crostini/sharedPaths');70 r.CROSTINI_SHARED_USB_DEVICES =71 r.CROSTINI_DETAILS.createChild('/crostini/sharedUsbDevices');72 if (loadTimeData.valueExists('showCrostiniDiskResize') &&73 loadTimeData.getBoolean('showCrostiniDiskResize')) {74 r.CROSTINI_DISK_RESIZE =75 r.CROSTINI_DETAILS.createChild('/crostini/diskResize');76 }77 }78 if (loadTimeData.valueExists('showPluginVm') &&79 loadTimeData.getBoolean('showPluginVm')) {80 r.PLUGIN_VM = r.BASIC.createSection('/pluginVm', 'pluginVm');81 r.PLUGIN_VM_DETAILS = r.PLUGIN_VM.createChild('/pluginVm/details');82 r.PLUGIN_VM_SHARED_PATHS =83 r.PLUGIN_VM.createChild('/pluginVm/sharedPaths');84 }85 r.GOOGLE_ASSISTANT = r.SEARCH.createChild('/googleAssistant');86 r.ADVANCED = new settings.Route('/advanced');87 r.PRIVACY = r.ADVANCED.createSection('/privacy', 'privacy');88 // Languages and input89 r.LANGUAGES = r.ADVANCED.createSection('/languages', 'languages');90 r.LANGUAGES_DETAILS = r.LANGUAGES.createChild('/languages/details');91 r.INPUT_METHODS =92 r.LANGUAGES_DETAILS.createChild('/languages/inputMethods');93 r.PRINTING = r.ADVANCED.createSection('/printing', 'printing');94 r.ACCESSIBILITY = r.ADVANCED.createSection('/accessibility', 'a11y');95 if (!loadTimeData.getBoolean('isGuest')) {96 if (loadTimeData.getBoolean('splitSettingsSyncEnabled')) {97 r.OS_SYNC = r.PEOPLE.createChild('/osSync');98 }99 // Personalization100 r.PERSONALIZATION =101 r.BASIC.createSection('/personalization', 'personalization');102 r.CHANGE_PICTURE = r.PERSONALIZATION.createChild('/changePicture');103 // Files (analogous to Downloads)104 r.FILES = r.ADVANCED.createSection('/files', 'files');105 r.SMB_SHARES = r.FILES.createChild('/smbShares');106 }107 // Reset108 if (loadTimeData.valueExists('allowPowerwash') &&109 loadTimeData.getBoolean('allowPowerwash')) {110 r.RESET = r.ADVANCED.createSection('/reset', 'reset');111 }112 const showAppManagement = loadTimeData.valueExists('showAppManagement') &&113 loadTimeData.getBoolean('showAppManagement');114 const showAndroidApps = loadTimeData.valueExists('androidAppsVisible') &&115 loadTimeData.getBoolean('androidAppsVisible');116 // Apps117 if (showAppManagement || showAndroidApps) {118 r.APPS = r.BASIC.createSection('/apps', 'apps');119 if (showAppManagement) {120 r.APP_MANAGEMENT = r.APPS.createChild('/app-management');121 r.APP_MANAGEMENT_DETAIL =122 r.APP_MANAGEMENT.createChild('/app-management/detail');123 }124 if (showAndroidApps) {125 r.ANDROID_APPS_DETAILS = r.APPS.createChild('/androidAppsDetails');126 }127 }128 r.DATETIME = r.ADVANCED.createSection('/dateTime', 'dateTime');129 r.DATETIME_TIMEZONE_SUBPAGE = r.DATETIME.createChild('/dateTime/timeZone');130 r.CUPS_PRINTERS = r.PRINTING.createChild('/cupsPrinters');131 r.MANAGE_ACCESSIBILITY =132 r.ACCESSIBILITY.createChild('/manageAccessibility');133 if (loadTimeData.getBoolean('showExperimentalAccessibilitySwitchAccess')) {134 r.MANAGE_SWITCH_ACCESS_SETTINGS = r.MANAGE_ACCESSIBILITY.createChild(135 '/manageAccessibility/switchAccess');136 }137 r.MANAGE_TTS_SETTINGS =138 r.MANAGE_ACCESSIBILITY.createChild('/manageAccessibility/tts');139 r.MANAGE_CAPTION_SETTINGS =140 r.MANAGE_ACCESSIBILITY.createChild('/manageAccessibility/captions');141 return r;142 }143 /**144 * @return {!settings.Router} A router with at least those routes common to OS145 * and browser settings. If the window is not in OS settings (based on146 * loadTimeData) then browser specific routes are added. If the window is147 * OS settings or if Chrome OS is using a consolidated settings page for148 * OS and browser settings then OS specific routes are added.149 */150 function buildRouter() {151 return new settings.Router(createOSSettingsRoutes());152 }153 settings.Router.setInstance(buildRouter());154 window.addEventListener('popstate', function(event) {...
ReportView.js
Source:ReportView.js
...10 */11 constructor(title) {12 super(true);13 this.registerRequiredCSS('ui/reportView.css');14 var contentBox = this.contentElement.createChild('div', 'report-content-box');15 this._headerElement = contentBox.createChild('div', 'report-header vbox');16 this._headerElement.createChild('div', 'report-title').textContent = title;17 this._sectionList = contentBox.createChild('div', 'vbox');18 }19 /**20 * @param {string} subtitle21 */22 setSubtitle(subtitle) {23 if (this._subtitleElement && this._subtitleElement.textContent === subtitle)24 return;25 if (!this._subtitleElement)26 this._subtitleElement = this._headerElement.createChild('div', 'report-subtitle');27 this._subtitleElement.textContent = subtitle;28 }29 /**30 * @param {?Element} link31 */32 setURL(link) {33 if (!this._urlElement)34 this._urlElement = this._headerElement.createChild('div', 'report-url link');35 this._urlElement.removeChildren();36 if (link)37 this._urlElement.appendChild(link);38 }39 /**40 * @return {!UI.Toolbar}41 */42 createToolbar() {43 var toolbar = new UI.Toolbar('');44 this._headerElement.appendChild(toolbar.element);45 return toolbar;46 }47 /**48 * @param {string} title49 * @param {string=} className50 * @return {!UI.ReportView.Section}51 */52 appendSection(title, className) {53 var section = new UI.ReportView.Section(title, className);54 section.show(this._sectionList);55 return section;56 }57 removeAllSection() {58 this._sectionList.removeChildren();59 }60};61/**62 * @unrestricted63 */64UI.ReportView.Section = class extends UI.VBox {65 /**66 * @param {string} title67 * @param {string=} className68 */69 constructor(title, className) {70 super();71 this.element.classList.add('report-section');72 if (className)73 this.element.classList.add(className);74 this._headerElement = this.element.createChild('div', 'report-section-header');75 this._titleElement = this._headerElement.createChild('div', 'report-section-title');76 this._titleElement.textContent = title;77 this._fieldList = this.element.createChild('div', 'vbox');78 /** @type {!Map.<string, !Element>} */79 this._fieldMap = new Map();80 }81 /**82 * @param {string} title83 */84 setTitle(title) {85 if (this._titleElement.textContent !== title)86 this._titleElement.textContent = title;87 }88 /**89 * @return {!UI.Toolbar}90 */91 createToolbar() {92 var toolbar = new UI.Toolbar('');93 this._headerElement.appendChild(toolbar.element);94 return toolbar;95 }96 /**97 * @param {string} title98 * @param {string=} textValue99 * @return {!Element}100 */101 appendField(title, textValue) {102 var row = this._fieldMap.get(title);103 if (!row) {104 row = this._fieldList.createChild('div', 'report-field');105 row.createChild('div', 'report-field-name').textContent = title;106 this._fieldMap.set(title, row);107 row.createChild('div', 'report-field-value');108 }109 if (textValue)110 row.lastElementChild.textContent = textValue;111 return /** @type {!Element} */ (row.lastElementChild);112 }113 remove() {114 this.element.remove();115 }116 /**117 * @param {string} title118 */119 removeField(title) {120 var row = this._fieldMap.get(title);121 if (row)122 row.remove();123 this._fieldMap.delete(title);124 }125 /**126 * @param {string} title127 * @param {boolean} visible128 */129 setFieldVisible(title, visible) {130 var row = this._fieldMap.get(title);131 if (row)132 row.classList.toggle('hidden', !visible);133 }134 /**135 * @param {string} title136 * @return {?Element}137 */138 fieldValue(title) {139 var row = this._fieldMap.get(title);140 return row ? row.lastElementChild : null;141 }142 /**143 * @return {!Element}144 */145 appendRow() {146 return this._fieldList.createChild('div', 'report-row');147 }148 clearContent() {149 this._fieldList.removeChildren();150 this._fieldMap.clear();151 }...
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const child = await page._delegate.createChild();7 await child.close();8 await browser.close();9})();10const { chromium } = require('playwright');11(async () => {12 const browser = await chromium.launch();13 const context = await browser.newContext();14 const page = await context.newPage();15 const child = await page._delegate.createChild();16 await child.close();17 await browser.close();18})();19 at CDPSession.send (/Users/rahul/Desktop/playwright-test/node_modules/playwright-core/lib/cjs/pw-run.js:34:23)20 at CDPSession.send (/Users/rahul/Desktop/playwright-test/node_modules/playwright-core/lib/cjs/pw-run.js:34:23)21 at CDPSession.send (/Users/rahul/Desktop/playwright-test/node_modules/playwright-core/lib/cjs/pw-run.js:34:23)22 at CDPSession.send (/Users/rahul/Desktop/playwright-test/node_modules/playwright-core/lib/cjs/pw-run.js:34:23)23 at CDPSession.send (/Users/rahul/Desktop/playwright-test/node_modules/playwright-core/lib/cjs/pw-run.js:34:23)24 at CDPSession.send (/Users/rahul/Desktop/playwright-test/node_modules/playwright-core/lib/cjs/pw-run.js:34:23)25 at CDPSession.send (/Users/rahul/Desktop/playwright-test/node_modules/playwright-core/lib/cjs/pw-run.js:34:23)26 at CDPSession.send (/Users/rahul/Desktop/playwright-test/node_modules/playwright-core/lib/cjs/pw-run.js:34:23)27 at CDPSession.send (/Users/rahul/Desktop/playwright-test/node_modules/playwright-core/lib/cjs/pw-run.js:34:23)28 at CDPSession.send (/Users/rah
Using AI Code Generation
1const { firefox } = require('playwright');2(async () => {3 const browser = await firefox.launch({ headless: false });4 const context = await browser.newContext();5 const page = await context.newPage();6 const child = await page.context().createChild();7 const childPage = await child.newPage();8 await childPage.goto('
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 const child = await page.context().createChild();6 const childPage = await child.newPage();7 await child.close();8 await browser.close();9})();10const { chromium } = require('playwright');11(async () => {12 const browser = await chromium.launch();13 const page = await browser.newPage();14 const child = await page.context().createChild();15 const childPage = await child.newPage();16 await child.close();17 await browser.close();18})();19const { chromium } = require('playwright');20(async () => {21 const browser = await chromium.launch();22 const page = await browser.newPage();23 const child = await page.context().createChild();24 const childPage = await child.newPage();25 await child.close();26 await browser.close();27})();28const { chromium } = require('playwright');29(async () => {30 const browser = await chromium.launch();31 const page = await browser.newPage();32 const child = await page.context().createChild();33 const childPage = await child.newPage();34 await child.close();35 await browser.close();36})();37const { chromium } = require('playwright');38(async () => {39 const browser = await chromium.launch();40 const page = await browser.newPage();41 const child = await page.context().createChild();42 const childPage = await child.newPage();43 await child.close();44 await browser.close();45})();46const { chromium } = require('playwright');47(async () => {48 const browser = await chromium.launch();
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 const child = await page.context().createChild();6 const childPage = await child.newPage();7 await child.close();8 await browser.close();9})();
Using AI Code Generation
1const playwright = require('playwright');2const { chromium } = playwright;3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const child = await page._delegate.createChild();8 await child.close();9 await context.close();10 await browser.close();11})();12const playwright = require('playwright');13const { chromium } = playwright;14(async () => {15 const browser = await chromium.launch();16 const context = await browser.newContext();17 const page = await context.newPage();18 const child = await page._delegate.createChild();19 await child.close();20 await context.close();21 await browser.close();22})();23 at CDPSession.send (C:\Users\user\Documents\playwright\playwright\lib\client\cdpSession.js:86:13)24 at async CDPSession.sendMayFail (C:\Users\user\Documents\playwright\playwright\lib\client\cdpSession.js:100:16)25 at async CDPSession.send (C:\Users\user\Documents\playwright\playwright\lib\client\cdpSession.js:93:12)26 at async CDPSession.sendMayFail (C:\Users\user\Documents\playwright\playwright\lib\client\cdpSession.js:100:16)27 at async Object.closeTarget (C:\Users\user\Documents\playwright\playwright\lib\client\protocol\protocol.js:347:5)28 at async Page.close (C:\Users\user\Documents\playwright\playwright\lib\page.js:221:5)29 at async Object.<anonymous> (C:\Users\user\Documents\playwright\test.js:19:5)30 at async ModuleJob.run (internal/modules/esm/module_job.js:152:23)31 at async Promise.all (index 0)32 at async ESMLoader.import (internal/modules/esm/loader.js:169:24)
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 const child = await page.context().createChild();6 const childPage = await child.newPage();7 await browser.close();8})();
Using AI Code Generation
1const { chromium } = require('playwright');2const browser = await chromium.launch({ headless: false });3const page = await browser.newPage();4const child = await page.context().createChild();5const childPage = await child.newPage();6await child.close();7const { chromium } = require('playwright');8const browser = await chromium.launch({ headless: false });9const context = await browser.newContext();10const page = await context.newPage();11const child = await context.createChild();12const childPage = await child.newPage();13await child.close();14const { chromium } = require('playwright');15const browser = await chromium.launch({ headless: false });16const context = await browser.newContext();17const page = await context.newPage();18const child = await page.context().createChild();19const childPage = await child.newPage();20await child.close();
Using AI Code Generation
1import { chromium } from 'playwright';2import { createChild } from 'playwright/lib/server/browserContext';3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const childContext = createChild(context);8 const childPage = await childContext.newPage();9 await childPage.screenshot({ path: 'child-page.png' });10 await browser.close();11})();
Using AI Code Generation
1const { createChild } = require('playwright/lib/server/browserServer');2const { env } = require('process');3const { chromium } = require('playwright');4const browser = await chromium.launch();5const browserServer = await browser._createServer();6const childProcess = await createChild(browserServer._process, browserServer._gracefullyClose, env);7childProcess.on('exit', (code) => {8 console.log('child process exited with code ' + code);9});10childProcess.on('message', (message) => {11 console.log('child process message ' + message);12});13childProcess.on('error', (error) => {14 console.log('child process error ' + error);15});16childProcess.on('close', (code) => {17 console.log('child process closed with code ' + code);18});19childProcess.on('disconnect', () => {20 console.log('child process disconnected');21});22childProcess.on('uncaughtException', (error) => {23 console.log('child process uncaughtException ' + error);24});25const { createChild } = require('playwright/lib/server/browserServer');26const { env } = require('process');27const { chromium } = require('playwright');28const browser = await chromium.launch();29const browserServer = await browser._createServer();30const childProcess = await createChild(browserServer._process, browserServer._gracefullyClose, env);31childProcess.on('exit', (code) => {32 console.log('child process exited with code ' + code);33});34childProcess.on('message', (message) => {35 console.log('child process message ' + message);36});37childProcess.on('error', (error) => {38 console.log('child process error ' + error);39});40childProcess.on('close', (code) => {41 console.log('child process closed with code ' + code);42});43childProcess.on('disconnect', () => {44 console.log('child process disconnected');45});46childProcess.on('uncaughtException', (error) => {47 console.log('child process uncaughtException ' + error);48});49const { createChild } = require('playwright/lib/server/browserServer
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!