Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2017 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 | |
| 5 Help.ReleaseNoteManager = class { | |
| 6 /** | |
| 7 * @return {?Help.ReleaseNote} | |
| 8 */ | |
| 9 static getCurrentVersionReleaseNote() { | |
| 10 var chromeRegex = new RegExp('(?:^|\\W)Chrome/(\\S+)'); | |
| 11 var chromeMatch = navigator.userAgent.match(chromeRegex); | |
| 12 if (!chromeMatch || chromeMatch.length < 2) | |
| 13 return null; | |
| 14 var chromeVersion = parseInt(chromeMatch[1].split('.')[0], 10); | |
| 15 for (var note of Help.ReleaseNoteManager._releaseNotesByVersion) { | |
| 16 if (note.version === chromeVersion) | |
| 17 return note; | |
| 18 } | |
|
luoe
2017/02/11 00:30:54
How about something shorter?
return _releaseNotesB
| |
| 19 return null; | |
| 20 } | |
| 21 | |
| 22 constructor() { | |
| 23 this._timeoutDuration = 500; | |
| 24 // Only start showing release notes v58 and onwards | |
| 25 this._versionSetting = Common.settings.createSetting('releaseNoteVersionSeen ', 57, false); | |
| 26 } | |
| 27 | |
| 28 /** | |
| 29 * @return {?SDK.ConsoleMessage} | |
| 30 */ | |
| 31 maybeGetReleaseNote() { | |
| 32 if (!Runtime.experiments.isEnabled('releaseNote')) | |
| 33 return null; | |
| 34 var chromeRegex = new RegExp('(?:^|\\W)Chrome/(\\S+)'); | |
| 35 var chromeMatch = navigator.userAgent.match(chromeRegex); | |
| 36 if (!chromeMatch || chromeMatch.length < 2) | |
| 37 return null; | |
| 38 var chromeVersion = parseInt(chromeMatch[1].split('.')[0], 10); | |
| 39 var lastVersionSeen = this._versionSetting.get(); | |
| 40 var note = this._getReleaseNote(chromeVersion, lastVersionSeen); | |
| 41 if (!note) | |
| 42 return null; | |
| 43 return this._releaseNoteConsoleMessage(note); | |
| 44 } | |
| 45 | |
| 46 /** | |
| 47 * @param {number} version | |
| 48 */ | |
| 49 sawReleaseNote(version) { | |
| 50 this._versionSetting.set(version); | |
| 51 } | |
| 52 | |
| 53 /** | |
| 54 * @param {number} browserVersion | |
| 55 * @param {number} lastVersionSeen | |
| 56 * @return {?Help.ReleaseNote} | |
| 57 */ | |
| 58 _getReleaseNote(browserVersion, lastVersionSeen) { | |
| 59 for (var note of Help.ReleaseNoteManager._releaseNotesByVersion) { | |
| 60 if (note.version > lastVersionSeen && note.version === browserVersion) { | |
| 61 note.timeout = this._timeoutDuration; | |
|
luoe
2017/02/11 00:30:54
In the future, other assistance elements besides r
| |
| 62 return note; | |
| 63 } | |
| 64 } | |
| 65 return null; | |
| 66 } | |
| 67 | |
| 68 /** | |
| 69 * @param {!Help.ReleaseNote} note | |
| 70 * @return {!SDK.ConsoleMessage} | |
| 71 */ | |
| 72 _releaseNoteConsoleMessage(note) { | |
| 73 var messageText = 'Release Notes'; | |
| 74 return new SDK.ConsoleMessage( | |
| 75 SDK.targetManager.mainTarget(), SDK.ConsoleMessage.MessageSource.Other, SDK.ConsoleMessage.MessageLevel.Note, | |
| 76 messageText, SDK.ConsoleMessage.MessageType.Log, undefined, undefined, u ndefined, undefined, [{ | |
| 77 type: 'releaseNote', | |
| 78 objectId: 'releaseNote', | |
| 79 description: JSON.stringify(note), | |
| 80 }], | |
| 81 undefined, /* timestamp */ 1); | |
| 82 } | |
| 83 | |
| 84 /** | |
| 85 * @param {number} version | |
| 86 * @return {?SDK.ConsoleMessage} | |
| 87 */ | |
| 88 _showReleaseNoteByVersionForTesting(version) { | |
| 89 var browserVersion = version || 57; | |
| 90 var lastVersionSeen = browserVersion - 1; | |
| 91 var note = this._getReleaseNote(browserVersion, lastVersionSeen); | |
| 92 if (!note) | |
| 93 return null; | |
| 94 return this._releaseNoteConsoleMessage(note); | |
| 95 } | |
| 96 }; | |
| 97 | |
| 98 // NOTE: need to be careful about adding release notes early otherwise it'll | |
| 99 // be shown in Canary (e.g. make sure the release notes are accurate) | |
| 100 | |
| 101 /** @typedef {!{src: string}} */ | |
| 102 Help.ReleaseNoteImage; | |
| 103 | |
| 104 /** @typedef {!{text: string, link: string, featured: (boolean | undefined)}} */ | |
| 105 Help.ReleaseNoteHighlight; | |
| 106 | |
| 107 /** @typedef {!{version: number, highlights: !Array<!Help.ReleaseNoteHighlight>, link: string, image: !Help.ReleaseNoteImage}} */ | |
| 108 Help.ReleaseNote; | |
| 109 | |
| 110 /** @type {!Array<!Help.ReleaseNote>} */ | |
| 111 Help.ReleaseNoteManager._releaseNotesByVersion = [ | |
|
luoe
2017/02/11 00:30:54
Can we move this data object into its own file?
chenwilliam
2017/02/15 00:57:08
Done.
| |
| 112 { | |
| 113 version: 57, | |
| 114 highlights: [ | |
| 115 { | |
| 116 text: 'Re-designed Performance panel', | |
| 117 link: 'https://developers.google.com/web/updates/2016/06/devtools-digest ', | |
| 118 featured: true, | |
| 119 }, | |
| 120 { | |
| 121 text: 'Inline breakpoints', | |
| 122 link: 'https://developers.google.com/web/updates/2016/06/devtools-digest ', | |
| 123 }, | |
| 124 { | |
| 125 text: 'Better async debugging', | |
| 126 link: 'https://developers.google.com/web/updates/2016/06/devtools-digest ', | |
| 127 }, | |
| 128 { | |
| 129 text: 'Node.js debugging is stable', | |
| 130 link: 'https://developers.google.com/web/updates/2016/06/devtools-digest ', | |
| 131 }, | |
| 132 ], | |
| 133 link: 'https://developers.google.com/web/updates/2016/06/devtools-digest', | |
| 134 image: { | |
| 135 src: 'https://developers.google.com/web/updates/images/2016/08/colorpicker .jpg', | |
| 136 }, | |
| 137 }, | |
| 138 { | |
| 139 version: 58, | |
| 140 highlights: [ | |
| 141 { | |
| 142 text: 'Highlight #1', | |
| 143 link: 'https://developers.google.com/web/updates/2016/06/devtools-digest ', | |
| 144 featured: true, | |
| 145 }, | |
| 146 { | |
| 147 text: 'Highlight #2', | |
| 148 link: 'https://developers.google.com/web/updates/2016/06/devtools-digest ', | |
| 149 }, | |
| 150 { | |
| 151 text: 'Highlight #3', | |
| 152 link: 'https://developers.google.com/web/updates/2016/06/devtools-digest ', | |
| 153 }, | |
| 154 ], | |
| 155 link: 'https://developers.google.com/web/updates/2016/06/devtools-digest', | |
| 156 image: { | |
| 157 src: 'https://developers.google.com/web/updates/images/2016/08/colorpicker .jpg', | |
| 158 }, | |
| 159 } | |
| 160 ]; | |
| 161 | |
| 162 /** | |
| 163 * @implements {UI.ActionDelegate} | |
| 164 */ | |
| 165 Help.ReleaseNoteManager.ActionDelegate = class { | |
| 166 /** | |
| 167 * @override | |
| 168 * @param {!UI.Context} context | |
| 169 * @param {string} actionId | |
| 170 * @return {boolean} | |
| 171 */ | |
| 172 handleAction(context, actionId) { | |
| 173 if (actionId === 'help.release-notes') { | |
| 174 var link = Help.ReleaseNoteManager.getCurrentVersionReleaseNote().link; | |
|
luoe
2017/02/11 00:30:54
getCurrentVersionReleaseNote() may be null
| |
| 175 InspectorFrontendHost.openInNewTab(link); | |
| 176 return true; | |
| 177 } | |
| 178 return false; | |
| 179 } | |
| 180 }; | |
| OLD | NEW |