Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 1 | // Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Tim van der Lippe | 0ed1d2b | 2020-02-04 13:45:13 | [diff] [blame] | 5 | import * as Common from '../common/common.js'; |
| 6 | import * as MobileThrottling from '../mobile_throttling/mobile_throttling.js'; |
| 7 | import * as SDK from '../sdk/sdk.js'; |
| 8 | import * as UI from '../ui/ui.js'; |
| 9 | |
| 10 | export class NetworkConfigView extends UI.Widget.VBox { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 11 | constructor() { |
| 12 | super(true); |
| 13 | this.registerRequiredCSS('network/networkConfigView.css'); |
| 14 | this.contentElement.classList.add('network-config'); |
| 15 | |
| 16 | this._createCacheSection(); |
| 17 | this.contentElement.createChild('div').classList.add('panel-section-separator'); |
| 18 | this._createNetworkThrottlingSection(); |
| 19 | this.contentElement.createChild('div').classList.add('panel-section-separator'); |
| 20 | this._createUserAgentSection(); |
| 21 | } |
| 22 | |
| 23 | /** |
Chandani Shrestha | 13ec533 | 2019-06-05 22:27:00 | [diff] [blame] | 24 | * @param {string} title |
Michael Liao | 9c1e0ce | 2019-10-21 22:42:23 | [diff] [blame] | 25 | * @return {{select: !Element, input: !Element, error: !Element}} |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 26 | */ |
Chandani Shrestha | 13ec533 | 2019-06-05 22:27:00 | [diff] [blame] | 27 | static createUserAgentSelectAndInput(title) { |
Paul Lewis | 6bcdb18 | 2020-01-23 11:08:05 | [diff] [blame] | 28 | const userAgentSetting = self.Common.settings.createSetting('customUserAgent', ''); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 29 | const userAgentSelectElement = createElement('select'); |
Chandani Shrestha | 13ec533 | 2019-06-05 22:27:00 | [diff] [blame] | 30 | UI.ARIAUtils.setAccessibleName(userAgentSelectElement, title); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 31 | |
Tim van der Lippe | 0ed1d2b | 2020-02-04 13:45:13 | [diff] [blame] | 32 | const customOverride = {title: Common.UIString.UIString('Custom...'), value: 'custom'}; |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 33 | userAgentSelectElement.appendChild(new Option(customOverride.title, customOverride.value)); |
| 34 | |
Tim van der Lippe | 119690c | 2020-01-13 12:31:30 | [diff] [blame] | 35 | for (const userAgentDescriptor of userAgentGroups) { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 36 | const groupElement = userAgentSelectElement.createChild('optgroup'); |
| 37 | groupElement.label = userAgentDescriptor.title; |
| 38 | for (const userAgentVersion of userAgentDescriptor.values) { |
Tim van der Lippe | 0ed1d2b | 2020-02-04 13:45:13 | [diff] [blame] | 39 | const userAgentValue = |
| 40 | SDK.NetworkManager.MultitargetNetworkManager.patchUserAgentWithChromeVersion(userAgentVersion.value); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 41 | groupElement.appendChild(new Option(userAgentVersion.title, userAgentValue)); |
| 42 | } |
| 43 | } |
| 44 | |
| 45 | userAgentSelectElement.selectedIndex = 0; |
| 46 | |
Tim van der Lippe | 0ed1d2b | 2020-02-04 13:45:13 | [diff] [blame] | 47 | const otherUserAgentElement = UI.UIUtils.createInput('', 'text'); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 48 | otherUserAgentElement.value = userAgentSetting.get(); |
| 49 | otherUserAgentElement.title = userAgentSetting.get(); |
Tim van der Lippe | 0ed1d2b | 2020-02-04 13:45:13 | [diff] [blame] | 50 | otherUserAgentElement.placeholder = Common.UIString.UIString('Enter a custom user agent'); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 51 | otherUserAgentElement.required = true; |
Chandani Shrestha | 13ec533 | 2019-06-05 22:27:00 | [diff] [blame] | 52 | UI.ARIAUtils.setAccessibleName(otherUserAgentElement, otherUserAgentElement.placeholder); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 53 | |
Michael Liao | 9c1e0ce | 2019-10-21 22:42:23 | [diff] [blame] | 54 | const errorElement = createElementWithClass('div', 'network-config-input-validation-error'); |
| 55 | UI.ARIAUtils.markAsAlert(errorElement); |
| 56 | if (!otherUserAgentElement.value) { |
| 57 | errorElement.textContent = ls`Custom user agent field is required`; |
| 58 | } |
| 59 | |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 60 | settingChanged(); |
| 61 | userAgentSelectElement.addEventListener('change', userAgentSelected, false); |
| 62 | otherUserAgentElement.addEventListener('input', applyOtherUserAgent, false); |
| 63 | |
| 64 | function userAgentSelected() { |
| 65 | const value = userAgentSelectElement.options[userAgentSelectElement.selectedIndex].value; |
| 66 | if (value !== customOverride.value) { |
| 67 | userAgentSetting.set(value); |
| 68 | otherUserAgentElement.value = value; |
| 69 | otherUserAgentElement.title = value; |
| 70 | } else { |
| 71 | otherUserAgentElement.select(); |
| 72 | } |
Michael Liao | 9c1e0ce | 2019-10-21 22:42:23 | [diff] [blame] | 73 | errorElement.textContent = ''; |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 74 | } |
| 75 | |
| 76 | function settingChanged() { |
| 77 | const value = userAgentSetting.get(); |
| 78 | const options = userAgentSelectElement.options; |
| 79 | let selectionRestored = false; |
| 80 | for (let i = 0; i < options.length; ++i) { |
| 81 | if (options[i].value === value) { |
| 82 | userAgentSelectElement.selectedIndex = i; |
| 83 | selectionRestored = true; |
| 84 | break; |
| 85 | } |
| 86 | } |
| 87 | |
Tim van der Lippe | 1d6e57a | 2019-09-30 11:55:34 | [diff] [blame] | 88 | if (!selectionRestored) { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 89 | userAgentSelectElement.selectedIndex = 0; |
Tim van der Lippe | 1d6e57a | 2019-09-30 11:55:34 | [diff] [blame] | 90 | } |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 91 | } |
| 92 | |
| 93 | function applyOtherUserAgent() { |
| 94 | if (userAgentSetting.get() !== otherUserAgentElement.value) { |
Michael Liao | 9c1e0ce | 2019-10-21 22:42:23 | [diff] [blame] | 95 | if (!otherUserAgentElement.value) { |
| 96 | errorElement.textContent = ls`Custom user agent field is required`; |
| 97 | } else { |
| 98 | errorElement.textContent = ''; |
| 99 | } |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 100 | userAgentSetting.set(otherUserAgentElement.value); |
| 101 | otherUserAgentElement.title = otherUserAgentElement.value; |
| 102 | settingChanged(); |
| 103 | } |
| 104 | } |
| 105 | |
Michael Liao | 9c1e0ce | 2019-10-21 22:42:23 | [diff] [blame] | 106 | return {select: userAgentSelectElement, input: otherUserAgentElement, error: errorElement}; |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 107 | } |
| 108 | |
| 109 | /** |
| 110 | * @param {string} title |
| 111 | * @param {string=} className |
| 112 | * @return {!Element} |
| 113 | */ |
| 114 | _createSection(title, className) { |
| 115 | const section = this.contentElement.createChild('section', 'network-config-group'); |
Tim van der Lippe | 1d6e57a | 2019-09-30 11:55:34 | [diff] [blame] | 116 | if (className) { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 117 | section.classList.add(className); |
Tim van der Lippe | 1d6e57a | 2019-09-30 11:55:34 | [diff] [blame] | 118 | } |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 119 | section.createChild('div', 'network-config-title').textContent = title; |
| 120 | return section.createChild('div', 'network-config-fields'); |
| 121 | } |
| 122 | |
| 123 | _createCacheSection() { |
Tim van der Lippe | 0ed1d2b | 2020-02-04 13:45:13 | [diff] [blame] | 124 | const section = this._createSection(Common.UIString.UIString('Caching'), 'network-config-disable-cache'); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 125 | section.appendChild(UI.SettingsUI.createSettingCheckbox( |
Tim van der Lippe | 0ed1d2b | 2020-02-04 13:45:13 | [diff] [blame] | 126 | Common.UIString.UIString('Disable cache'), self.Common.settings.moduleSetting('cacheDisabled'), true)); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 127 | } |
| 128 | |
| 129 | _createNetworkThrottlingSection() { |
Chandani Shrestha | 13ec533 | 2019-06-05 22:27:00 | [diff] [blame] | 130 | const title = ls`Network throttling`; |
| 131 | const section = this._createSection(title, 'network-config-throttling'); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 132 | const networkThrottlingSelect = |
| 133 | /** @type {!HTMLSelectElement} */ (section.createChild('select', 'chrome-select')); |
Tim van der Lippe | 0ed1d2b | 2020-02-04 13:45:13 | [diff] [blame] | 134 | MobileThrottling.ThrottlingManager.throttlingManager().decorateSelectWithNetworkThrottling(networkThrottlingSelect); |
Chandani Shrestha | 13ec533 | 2019-06-05 22:27:00 | [diff] [blame] | 135 | UI.ARIAUtils.setAccessibleName(networkThrottlingSelect, title); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 136 | } |
| 137 | |
| 138 | _createUserAgentSection() { |
Chandani Shrestha | 13ec533 | 2019-06-05 22:27:00 | [diff] [blame] | 139 | const title = ls`User agent`; |
| 140 | const section = this._createSection(title, 'network-config-ua'); |
Tim van der Lippe | 0ed1d2b | 2020-02-04 13:45:13 | [diff] [blame] | 141 | const checkboxLabel = UI.UIUtils.CheckboxLabel.create(Common.UIString.UIString('Select automatically'), true); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 142 | section.appendChild(checkboxLabel); |
| 143 | const autoCheckbox = checkboxLabel.checkboxElement; |
| 144 | |
Paul Lewis | 6bcdb18 | 2020-01-23 11:08:05 | [diff] [blame] | 145 | const customUserAgentSetting = self.Common.settings.createSetting('customUserAgent', ''); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 146 | customUserAgentSetting.addChangeListener(() => { |
Tim van der Lippe | 1d6e57a | 2019-09-30 11:55:34 | [diff] [blame] | 147 | if (autoCheckbox.checked) { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 148 | return; |
Tim van der Lippe | 1d6e57a | 2019-09-30 11:55:34 | [diff] [blame] | 149 | } |
Paul Lewis | 5a922e7 | 2020-01-24 11:58:08 | [diff] [blame] | 150 | self.SDK.multitargetNetworkManager.setCustomUserAgentOverride(customUserAgentSetting.get()); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 151 | }); |
| 152 | const customUserAgentSelectBox = section.createChild('div', 'network-config-ua-custom'); |
| 153 | autoCheckbox.addEventListener('change', userAgentSelectBoxChanged); |
Tim van der Lippe | 119690c | 2020-01-13 12:31:30 | [diff] [blame] | 154 | const customSelectAndInput = NetworkConfigView.createUserAgentSelectAndInput(title); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 155 | customSelectAndInput.select.classList.add('chrome-select'); |
| 156 | customUserAgentSelectBox.appendChild(customSelectAndInput.select); |
| 157 | customUserAgentSelectBox.appendChild(customSelectAndInput.input); |
Michael Liao | 9c1e0ce | 2019-10-21 22:42:23 | [diff] [blame] | 158 | customUserAgentSelectBox.appendChild(customSelectAndInput.error); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 159 | userAgentSelectBoxChanged(); |
| 160 | |
| 161 | function userAgentSelectBoxChanged() { |
| 162 | const useCustomUA = !autoCheckbox.checked; |
| 163 | customUserAgentSelectBox.classList.toggle('checked', useCustomUA); |
| 164 | customSelectAndInput.select.disabled = !useCustomUA; |
| 165 | customSelectAndInput.input.disabled = !useCustomUA; |
Michael Liao | 9c1e0ce | 2019-10-21 22:42:23 | [diff] [blame] | 166 | customSelectAndInput.error.hidden = !useCustomUA; |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 167 | const customUA = useCustomUA ? customUserAgentSetting.get() : ''; |
Paul Lewis | 5a922e7 | 2020-01-24 11:58:08 | [diff] [blame] | 168 | self.SDK.multitargetNetworkManager.setCustomUserAgentOverride(customUA); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 169 | } |
| 170 | } |
Paul Lewis | 5650965 | 2019-12-06 12:51:58 | [diff] [blame] | 171 | } |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 172 | |
| 173 | /** @type {!Array.<{title: string, values: !Array.<{title: string, value: string}>}>} */ |
Tim van der Lippe | 119690c | 2020-01-13 12:31:30 | [diff] [blame] | 174 | export const userAgentGroups = [ |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 175 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 176 | title: ls`Android`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 177 | values: [ |
| 178 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 179 | title: ls`Android (4.0.2) Browser \u2014 Galaxy Nexus`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 180 | value: |
| 181 | 'Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' |
| 182 | }, |
| 183 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 184 | title: ls`Android (2.3) Browser \u2014 Nexus S`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 185 | value: |
| 186 | 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' |
| 187 | } |
| 188 | ] |
| 189 | }, |
| 190 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 191 | title: ls`BlackBerry`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 192 | values: [ |
| 193 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 194 | title: ls`BlackBerry \u2014 BB10`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 195 | value: |
| 196 | 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.1+ (KHTML, like Gecko) Version/10.0.0.1337 Mobile Safari/537.1+' |
| 197 | }, |
| 198 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 199 | title: ls`BlackBerry \u2014 PlayBook 2.1`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 200 | value: |
| 201 | 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML, like Gecko) Version/7.2.1.0 Safari/536.2+' |
| 202 | }, |
| 203 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 204 | title: ls`BlackBerry \u2014 9900`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 205 | value: |
| 206 | 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.187 Mobile Safari/534.11+' |
| 207 | } |
| 208 | ] |
| 209 | }, |
| 210 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 211 | title: ls`Chrome`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 212 | values: [ |
| 213 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 214 | title: ls`Chrome \u2014 Android Mobile`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 215 | value: |
| 216 | 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36' |
| 217 | }, |
| 218 | { |
Mathias Bynens | fbf3696 | 2019-12-03 12:14:59 | [diff] [blame] | 219 | title: ls`Chrome \u2014 Android Mobile (high-end)`, |
| 220 | value: |
| 221 | 'Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36' |
| 222 | }, |
| 223 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 224 | title: ls`Chrome \u2014 Android Tablet`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 225 | value: |
| 226 | 'Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36' |
| 227 | }, |
| 228 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 229 | title: ls`Chrome \u2014 iPhone`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 230 | value: |
Mathias Bynens | fbf3696 | 2019-12-03 12:14:59 | [diff] [blame] | 231 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/%s Mobile/15E148 Safari/604.1' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 232 | }, |
| 233 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 234 | title: ls`Chrome \u2014 iPad`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 235 | value: |
Mathias Bynens | fbf3696 | 2019-12-03 12:14:59 | [diff] [blame] | 236 | 'Mozilla/5.0 (iPad; CPU OS 13_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/%s Mobile/15E148 Safari/604.1' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 237 | }, |
| 238 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 239 | title: ls`Chrome \u2014 Chrome OS`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 240 | value: 'Mozilla/5.0 (X11; CrOS x86_64 10066.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36' |
| 241 | }, |
| 242 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 243 | title: ls`Chrome \u2014 Mac`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 244 | value: |
Mathias Bynens | fbf3696 | 2019-12-03 12:14:59 | [diff] [blame] | 245 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 246 | }, |
| 247 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 248 | title: ls`Chrome \u2014 Windows`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 249 | value: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36' |
| 250 | } |
| 251 | ] |
| 252 | }, |
| 253 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 254 | title: ls`Firefox`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 255 | values: [ |
| 256 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 257 | title: ls`Firefox \u2014 Android Mobile`, |
Mathias Bynens | f05ffb2 | 2019-11-29 13:56:36 | [diff] [blame] | 258 | value: 'Mozilla/5.0 (Android 4.4; Mobile; rv:70.0) Gecko/70.0 Firefox/70.0' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 259 | }, |
| 260 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 261 | title: ls`Firefox \u2014 Android Tablet`, |
Mathias Bynens | f05ffb2 | 2019-11-29 13:56:36 | [diff] [blame] | 262 | value: 'Mozilla/5.0 (Android 4.4; Tablet; rv:70.0) Gecko/70.0 Firefox/70.0' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 263 | }, |
| 264 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 265 | title: ls`Firefox \u2014 iPhone`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 266 | value: |
| 267 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4' |
| 268 | }, |
| 269 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 270 | title: ls`Firefox \u2014 iPad`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 271 | value: |
| 272 | 'Mozilla/5.0 (iPad; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4' |
| 273 | }, |
| 274 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 275 | title: ls`Firefox \u2014 Mac`, |
Mathias Bynens | fbf3696 | 2019-12-03 12:14:59 | [diff] [blame] | 276 | value: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:70.0) Gecko/20100101 Firefox/70.0' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 277 | }, |
| 278 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 279 | title: ls`Firefox \u2014 Windows`, |
Mathias Bynens | f05ffb2 | 2019-11-29 13:56:36 | [diff] [blame] | 280 | value: 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 281 | } |
| 282 | ] |
| 283 | }, |
| 284 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 285 | title: ls`Googlebot`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 286 | values: [ |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 287 | {title: ls`Googlebot`, value: 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'}, { |
Zoe Clifford | 0734a8b | 2019-12-03 22:36:47 | [diff] [blame] | 288 | title: ls`Googlebot Desktop`, |
| 289 | value: |
| 290 | 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/%s Safari/537.36' |
| 291 | }, |
| 292 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 293 | title: ls`Googlebot Smartphone`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 294 | value: |
Zoe Clifford | 0734a8b | 2019-12-03 22:36:47 | [diff] [blame] | 295 | 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 296 | } |
| 297 | ] |
| 298 | }, |
| 299 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 300 | title: ls`Internet Explorer`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 301 | values: [ |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 302 | {title: ls`Internet Explorer 11`, value: 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'}, |
| 303 | { |
| 304 | title: ls`Internet Explorer 10`, |
| 305 | value: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)' |
| 306 | }, |
| 307 | {title: ls`Internet Explorer 9`, value: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'}, |
| 308 | {title: ls`Internet Explorer 8`, value: 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)'}, |
| 309 | {title: ls`Internet Explorer 7`, value: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'} |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 310 | ] |
| 311 | }, |
| 312 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 313 | title: ls`Microsoft Edge`, |
Mike Jackson | c8f2c9e | 2019-08-08 22:51:16 | [diff] [blame] | 314 | values: [ |
| 315 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 316 | title: ls`Microsoft Edge (Chromium) \u2014 Windows`, |
Mike Jackson | c8f2c9e | 2019-08-08 22:51:16 | [diff] [blame] | 317 | value: |
| 318 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36 Edg/%s' |
| 319 | }, |
| 320 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 321 | title: ls`Microsoft Edge (Chromium) \u2014 Mac`, |
Mike Jackson | c8f2c9e | 2019-08-08 22:51:16 | [diff] [blame] | 322 | value: |
Mathias Bynens | fbf3696 | 2019-12-03 12:14:59 | [diff] [blame] | 323 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Chrome/%s Safari/604.1 Edg/%s' |
Mike Jackson | c8f2c9e | 2019-08-08 22:51:16 | [diff] [blame] | 324 | }, |
| 325 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 326 | title: ls`Microsoft Edge \u2014 iPhone`, |
Mike Jackson | c8f2c9e | 2019-08-08 22:51:16 | [diff] [blame] | 327 | value: |
| 328 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 EdgiOS/44.5.0.10 Mobile/15E148 Safari/604.1' |
| 329 | }, |
| 330 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 331 | title: ls`Microsoft Edge \u2014 iPad`, |
Mike Jackson | c8f2c9e | 2019-08-08 22:51:16 | [diff] [blame] | 332 | value: |
| 333 | 'Mozilla/5.0 (iPad; CPU OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 EdgiOS/44.5.2 Mobile/15E148 Safari/605.1.15' |
| 334 | }, |
| 335 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 336 | title: ls`Microsoft Edge \u2014 Android Mobile`, |
Mike Jackson | c8f2c9e | 2019-08-08 22:51:16 | [diff] [blame] | 337 | value: |
| 338 | 'Mozilla/5.0 (Linux; Android 8.1.0; Pixel Build/OPM4.171019.021.D1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36 EdgA/42.0.0.2057' |
| 339 | }, |
| 340 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 341 | title: ls`Microsoft Edge \u2014 Android Tablet`, |
Mike Jackson | c8f2c9e | 2019-08-08 22:51:16 | [diff] [blame] | 342 | value: |
| 343 | 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Safari/537.36 EdgA/42.0.0.2057' |
| 344 | }, |
| 345 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 346 | title: ls`Microsoft Edge (EdgeHTML) \u2014 Windows`, |
Mike Jackson | c8f2c9e | 2019-08-08 22:51:16 | [diff] [blame] | 347 | value: |
| 348 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362' |
| 349 | }, |
| 350 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 351 | title: ls`Microsoft Edge (EdgeHTML) \u2014 XBox`, |
Mike Jackson | c8f2c9e | 2019-08-08 22:51:16 | [diff] [blame] | 352 | value: |
| 353 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; Xbox; Xbox One) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362' |
| 354 | } |
| 355 | ] |
| 356 | }, |
| 357 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 358 | title: ls`Opera`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 359 | values: [ |
| 360 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 361 | title: ls`Opera \u2014 Mac`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 362 | value: |
Mathias Bynens | fbf3696 | 2019-12-03 12:14:59 | [diff] [blame] | 363 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36 OPR/65.0.3467.48' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 364 | }, |
| 365 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 366 | title: ls`Opera \u2014 Windows`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 367 | value: |
Mathias Bynens | fbf3696 | 2019-12-03 12:14:59 | [diff] [blame] | 368 | 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36 OPR/65.0.3467.48' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 369 | }, |
| 370 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 371 | title: ls`Opera (Presto) \u2014 Mac`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 372 | value: 'Opera/9.80 (Macintosh; Intel Mac OS X 10.9.1) Presto/2.12.388 Version/12.16' |
| 373 | }, |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 374 | {title: ls`Opera (Presto) \u2014 Windows`, value: 'Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.16'}, { |
| 375 | title: ls`Opera Mobile \u2014 Android Mobile`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 376 | value: 'Opera/12.02 (Android 4.1; Linux; Opera Mobi/ADR-1111101157; U; en-US) Presto/2.9.201 Version/12.02' |
| 377 | }, |
| 378 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 379 | title: ls`Opera Mini \u2014 iOS`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 380 | value: 'Opera/9.80 (iPhone; Opera Mini/8.0.0/34.2336; U; en) Presto/2.8.119 Version/11.10' |
| 381 | } |
| 382 | ] |
| 383 | }, |
| 384 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 385 | title: ls`Safari`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 386 | values: [ |
| 387 | { |
Mathias Bynens | d569806 | 2019-12-04 09:08:14 | [diff] [blame] | 388 | title: ls`Safari \u2014 iPad iOS 13.2`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 389 | value: |
Mathias Bynens | d569806 | 2019-12-04 09:08:14 | [diff] [blame] | 390 | 'Mozilla/5.0 (iPad; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 391 | }, |
| 392 | { |
Mathias Bynens | d569806 | 2019-12-04 09:08:14 | [diff] [blame] | 393 | title: ls`Safari \u2014 iPhone iOS 13.2`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 394 | value: |
Mathias Bynens | d569806 | 2019-12-04 09:08:14 | [diff] [blame] | 395 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 396 | }, |
| 397 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 398 | title: ls`Safari \u2014 Mac`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 399 | value: |
Mathias Bynens | d569806 | 2019-12-04 09:08:14 | [diff] [blame] | 400 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Safari/605.1.15' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 401 | } |
| 402 | ] |
| 403 | }, |
| 404 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 405 | title: ls`UC Browser`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 406 | values: [ |
| 407 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 408 | title: ls`UC Browser \u2014 Android Mobile`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 409 | value: |
Erik Luo | 4da6ecb | 2019-04-11 21:39:04 | [diff] [blame] | 410 | 'Mozilla/5.0 (Linux; U; Android 8.1.0; en-US; Nexus 6P Build/OPM7.181205.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.11.1.1197 Mobile Safari/537.36' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 411 | }, |
| 412 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 413 | title: ls`UC Browser \u2014 iOS`, |
Erik Luo | 4da6ecb | 2019-04-11 21:39:04 | [diff] [blame] | 414 | value: |
| 415 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/16B92 UCBrowser/12.1.7.1109 Mobile AliApp(TUnionSDK/0.1.20.3)' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 416 | }, |
| 417 | { |
Christy Chen | d0ae96c | 2019-09-24 19:05:17 | [diff] [blame] | 418 | title: ls`UC Browser \u2014 Windows Phone`, |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 419 | value: |
Erik Luo | 4da6ecb | 2019-04-11 21:39:04 | [diff] [blame] | 420 | 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile' |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 | [diff] [blame] | 421 | } |
| 422 | ] |
| 423 | } |
| 424 | ]; |