Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/help/ReleaseNoteManager.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/help/ReleaseNoteManager.js b/third_party/WebKit/Source/devtools/front_end/help/ReleaseNoteManager.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..04b434aac09636e3304ebc14d3ea9ff0ea619acf |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/devtools/front_end/help/ReleaseNoteManager.js |
| @@ -0,0 +1,180 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +Help.ReleaseNoteManager = class { |
| + /** |
| + * @return {?Help.ReleaseNote} |
| + */ |
| + static getCurrentVersionReleaseNote() { |
| + var chromeRegex = new RegExp('(?:^|\\W)Chrome/(\\S+)'); |
| + var chromeMatch = navigator.userAgent.match(chromeRegex); |
| + if (!chromeMatch || chromeMatch.length < 2) |
| + return null; |
| + var chromeVersion = parseInt(chromeMatch[1].split('.')[0], 10); |
| + for (var note of Help.ReleaseNoteManager._releaseNotesByVersion) { |
| + if (note.version === chromeVersion) |
| + return note; |
| + } |
|
luoe
2017/02/11 00:30:54
How about something shorter?
return _releaseNotesB
|
| + return null; |
| + } |
| + |
| + constructor() { |
| + this._timeoutDuration = 500; |
| + // Only start showing release notes v58 and onwards |
| + this._versionSetting = Common.settings.createSetting('releaseNoteVersionSeen', 57, false); |
| + } |
| + |
| + /** |
| + * @return {?SDK.ConsoleMessage} |
| + */ |
| + maybeGetReleaseNote() { |
| + if (!Runtime.experiments.isEnabled('releaseNote')) |
| + return null; |
| + var chromeRegex = new RegExp('(?:^|\\W)Chrome/(\\S+)'); |
| + var chromeMatch = navigator.userAgent.match(chromeRegex); |
| + if (!chromeMatch || chromeMatch.length < 2) |
| + return null; |
| + var chromeVersion = parseInt(chromeMatch[1].split('.')[0], 10); |
| + var lastVersionSeen = this._versionSetting.get(); |
| + var note = this._getReleaseNote(chromeVersion, lastVersionSeen); |
| + if (!note) |
| + return null; |
| + return this._releaseNoteConsoleMessage(note); |
| + } |
| + |
| + /** |
| + * @param {number} version |
| + */ |
| + sawReleaseNote(version) { |
| + this._versionSetting.set(version); |
| + } |
| + |
| + /** |
| + * @param {number} browserVersion |
| + * @param {number} lastVersionSeen |
| + * @return {?Help.ReleaseNote} |
| + */ |
| + _getReleaseNote(browserVersion, lastVersionSeen) { |
| + for (var note of Help.ReleaseNoteManager._releaseNotesByVersion) { |
| + if (note.version > lastVersionSeen && note.version === browserVersion) { |
| + note.timeout = this._timeoutDuration; |
|
luoe
2017/02/11 00:30:54
In the future, other assistance elements besides r
|
| + return note; |
| + } |
| + } |
| + return null; |
| + } |
| + |
| + /** |
| + * @param {!Help.ReleaseNote} note |
| + * @return {!SDK.ConsoleMessage} |
| + */ |
| + _releaseNoteConsoleMessage(note) { |
| + var messageText = 'Release Notes'; |
| + return new SDK.ConsoleMessage( |
| + SDK.targetManager.mainTarget(), SDK.ConsoleMessage.MessageSource.Other, SDK.ConsoleMessage.MessageLevel.Note, |
| + messageText, SDK.ConsoleMessage.MessageType.Log, undefined, undefined, undefined, undefined, [{ |
| + type: 'releaseNote', |
| + objectId: 'releaseNote', |
| + description: JSON.stringify(note), |
| + }], |
| + undefined, /* timestamp */ 1); |
| + } |
| + |
| + /** |
| + * @param {number} version |
| + * @return {?SDK.ConsoleMessage} |
| + */ |
| + _showReleaseNoteByVersionForTesting(version) { |
| + var browserVersion = version || 57; |
| + var lastVersionSeen = browserVersion - 1; |
| + var note = this._getReleaseNote(browserVersion, lastVersionSeen); |
| + if (!note) |
| + return null; |
| + return this._releaseNoteConsoleMessage(note); |
| + } |
| +}; |
| + |
| +// NOTE: need to be careful about adding release notes early otherwise it'll |
| +// be shown in Canary (e.g. make sure the release notes are accurate) |
| + |
| +/** @typedef {!{src: string}} */ |
| +Help.ReleaseNoteImage; |
| + |
| +/** @typedef {!{text: string, link: string, featured: (boolean | undefined)}} */ |
| +Help.ReleaseNoteHighlight; |
| + |
| +/** @typedef {!{version: number, highlights: !Array<!Help.ReleaseNoteHighlight>, link: string, image: !Help.ReleaseNoteImage}} */ |
| +Help.ReleaseNote; |
| + |
| +/** @type {!Array<!Help.ReleaseNote>} */ |
| +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.
|
| + { |
| + version: 57, |
| + highlights: [ |
| + { |
| + text: 'Re-designed Performance panel', |
| + link: 'https://developers.google.com/web/updates/2016/06/devtools-digest', |
| + featured: true, |
| + }, |
| + { |
| + text: 'Inline breakpoints', |
| + link: 'https://developers.google.com/web/updates/2016/06/devtools-digest', |
| + }, |
| + { |
| + text: 'Better async debugging', |
| + link: 'https://developers.google.com/web/updates/2016/06/devtools-digest', |
| + }, |
| + { |
| + text: 'Node.js debugging is stable', |
| + link: 'https://developers.google.com/web/updates/2016/06/devtools-digest', |
| + }, |
| + ], |
| + link: 'https://developers.google.com/web/updates/2016/06/devtools-digest', |
| + image: { |
| + src: 'https://developers.google.com/web/updates/images/2016/08/colorpicker.jpg', |
| + }, |
| + }, |
| + { |
| + version: 58, |
| + highlights: [ |
| + { |
| + text: 'Highlight #1', |
| + link: 'https://developers.google.com/web/updates/2016/06/devtools-digest', |
| + featured: true, |
| + }, |
| + { |
| + text: 'Highlight #2', |
| + link: 'https://developers.google.com/web/updates/2016/06/devtools-digest', |
| + }, |
| + { |
| + text: 'Highlight #3', |
| + link: 'https://developers.google.com/web/updates/2016/06/devtools-digest', |
| + }, |
| + ], |
| + link: 'https://developers.google.com/web/updates/2016/06/devtools-digest', |
| + image: { |
| + src: 'https://developers.google.com/web/updates/images/2016/08/colorpicker.jpg', |
| + }, |
| + } |
| +]; |
| + |
| +/** |
| + * @implements {UI.ActionDelegate} |
| + */ |
| +Help.ReleaseNoteManager.ActionDelegate = class { |
| + /** |
| + * @override |
| + * @param {!UI.Context} context |
| + * @param {string} actionId |
| + * @return {boolean} |
| + */ |
| + handleAction(context, actionId) { |
| + if (actionId === 'help.release-notes') { |
| + var link = Help.ReleaseNoteManager.getCurrentVersionReleaseNote().link; |
|
luoe
2017/02/11 00:30:54
getCurrentVersionReleaseNote() may be null
|
| + InspectorFrontendHost.openInNewTab(link); |
| + return true; |
| + } |
| + return false; |
| + } |
| +}; |