Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Issue 1630903002: material design user manager with create profile flow (Closed)

Created:
4 years, 11 months ago by Moe
Modified:
4 years, 9 months ago
CC:
chromium-reviews, pam+watch_chromium.org, arv+watch_chromium.org
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

material design user manager with create profile flow it excludes changes to the user pods as well profile import flow BUG=563722

Patch Set 1 #

Patch Set 2 : fixed a broken link #

Total comments: 2

Patch Set 3 : addressed roger's comments #

Total comments: 26

Patch Set 4 : addressed the comments #

Total comments: 30

Patch Set 5 : addressed tommy's comments #

Total comments: 46

Patch Set 6 : addressed tommy's comments #2 #

Total comments: 8

Patch Set 7 : Addressed Dan's comments #

Total comments: 48

Patch Set 8 : Addressed Dan's comments #2 #

Unified diffs Side-by-side diffs Delta from patch set Stats (+1620 lines, -349 lines) Patch
M chrome/app/generated_resources.grd View 2 chunks +4 lines, -1 line 0 comments Download
M chrome/browser/browser_resources.grd View 1 2 3 4 5 6 7 1 chunk +23 lines, -0 lines 0 comments Download
A + chrome/browser/resources/md_user_manager/compiled_resources2.gyp View 1 2 3 4 5 6 7 1 chunk +12 lines, -36 lines 0 comments Download
A chrome/browser/resources/md_user_manager/control_bar.css View 1 2 3 4 5 6 7 1 chunk +40 lines, -0 lines 0 comments Download
A chrome/browser/resources/md_user_manager/control_bar.html View 1 2 3 4 5 6 7 1 chunk +21 lines, -0 lines 0 comments Download
A chrome/browser/resources/md_user_manager/control_bar.js View 1 2 3 4 5 6 7 1 chunk +52 lines, -0 lines 0 comments Download
A chrome/browser/resources/md_user_manager/create_profile.css View 1 2 3 4 5 6 7 1 chunk +106 lines, -0 lines 0 comments Download
A chrome/browser/resources/md_user_manager/create_profile.html View 1 2 3 4 5 6 7 1 chunk +69 lines, -0 lines 0 comments Download
A chrome/browser/resources/md_user_manager/create_profile.js View 1 2 3 4 5 6 7 1 chunk +279 lines, -0 lines 0 comments Download
A + chrome/browser/resources/md_user_manager/profile_api.html View 1 2 3 4 1 chunk +1 line, -1 line 0 comments Download
A chrome/browser/resources/md_user_manager/profile_api.js View 1 2 3 4 5 6 7 1 chunk +159 lines, -0 lines 0 comments Download
A + chrome/browser/resources/md_user_manager/strings.html View 1 chunk +1 line, -1 line 0 comments Download
A + chrome/browser/resources/md_user_manager/supervised_user_learn_more.css View 1 2 3 4 5 6 7 2 chunks +13 lines, -3 lines 0 comments Download
A chrome/browser/resources/md_user_manager/supervised_user_learn_more.html View 1 2 3 4 5 6 7 1 chunk +27 lines, -0 lines 0 comments Download
A chrome/browser/resources/md_user_manager/supervised_user_learn_more.js View 1 2 3 4 5 6 7 1 chunk +25 lines, -0 lines 0 comments Download
A + chrome/browser/resources/md_user_manager/user_manager.css View 1 2 3 4 5 6 7 4 chunks +11 lines, -8 lines 0 comments Download
A chrome/browser/resources/md_user_manager/user_manager.html View 1 2 3 4 5 6 7 1 chunk +72 lines, -0 lines 0 comments Download
A + chrome/browser/resources/md_user_manager/user_manager.js View 1 2 3 4 5 6 7 7 chunks +19 lines, -31 lines 0 comments Download
A + chrome/browser/resources/md_user_manager/user_manager_pages.css View 1 2 3 4 5 6 7 1 chunk +2 lines, -4 lines 0 comments Download
A + chrome/browser/resources/md_user_manager/user_manager_pages.html View 1 2 3 4 5 6 7 1 chunk +9 lines, -13 lines 0 comments Download
A chrome/browser/resources/md_user_manager/user_manager_pages.js View 1 2 3 4 5 6 7 1 chunk +38 lines, -0 lines 0 comments Download
A + chrome/browser/resources/md_user_manager/user_manager_tutorial.css View 1 2 3 4 5 6 7 3 chunks +42 lines, -62 lines 0 comments Download
A chrome/browser/resources/md_user_manager/user_manager_tutorial.html View 1 2 3 4 5 6 7 1 chunk +81 lines, -0 lines 0 comments Download
A chrome/browser/resources/md_user_manager/user_manager_tutorial.js View 1 2 3 4 5 6 7 1 chunk +106 lines, -0 lines 0 comments Download
M chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc View 2 chunks +3 lines, -0 lines 0 comments Download
A + chrome/browser/ui/webui/signin/md_user_manager_ui.h View 3 chunks +10 lines, -8 lines 0 comments Download
A + chrome/browser/ui/webui/signin/md_user_manager_ui.cc View 1 2 3 4 3 chunks +47 lines, -17 lines 0 comments Download
A + chrome/browser/ui/webui/signin/signin_create_profile_handler.h View 1 2 3 4 10 chunks +59 lines, -29 lines 0 comments Download
A + chrome/browser/ui/webui/signin/signin_create_profile_handler.cc View 1 2 3 4 5 6 18 chunks +280 lines, -135 lines 0 comments Download
M chrome/chrome_browser_ui.gypi View 1 chunk +4 lines, -0 lines 0 comments Download
M chrome/common/url_constants.h View 2 chunks +2 lines, -0 lines 0 comments Download
M chrome/common/url_constants.cc View 2 chunks +2 lines, -0 lines 0 comments Download
M third_party/closure_compiler/compiled_resources2.gyp View 1 2 3 4 5 6 1 chunk +1 line, -0 lines 0 comments Download

Messages

Total messages: 29 (7 generated)
Moe
4 years, 11 months ago (2016-01-25 19:46:24 UTC) #2
Roger Tawa OOO till Jul 10th
lgtm I mostly looked at the C++ code. Maybe you could upload some screenshots to ...
4 years, 11 months ago (2016-01-27 19:13:26 UTC) #3
Moe
@rogerta, addressed your comment. @estade, This is the first patch for the new material design ...
4 years, 10 months ago (2016-01-29 14:42:58 UTC) #5
anthonyvd
Great work! Just a few minor comments. +mlerman. Mike, could you please take a look ...
4 years, 10 months ago (2016-01-29 15:50:18 UTC) #7
Mike Lerman
https://codereview.chromium.org/1630903002/diff/40001/chrome/browser/ui/webui/signin/signin_create_profile_handler.cc File chrome/browser/ui/webui/signin/signin_create_profile_handler.cc (right): https://codereview.chromium.org/1630903002/diff/40001/chrome/browser/ui/webui/signin/signin_create_profile_handler.cc#newcode113 chrome/browser/ui/webui/signin/signin_create_profile_handler.cc:113: std::string url = profiles::GetDefaultAvatarIconUrl(i); This is going to include ...
4 years, 10 months ago (2016-01-29 19:48:22 UTC) #8
Evan Stade
These days +dbeam is a better reviewer for webui stuff and particularly MD webui stuff. ...
4 years, 10 months ago (2016-01-30 01:52:12 UTC) #10
Moe
https://codereview.chromium.org/1630903002/diff/40001/chrome/browser/resources/md_user_manager/user_manager_tutorial.js File chrome/browser/resources/md_user_manager/user_manager_tutorial.js (right): https://codereview.chromium.org/1630903002/diff/40001/chrome/browser/resources/md_user_manager/user_manager_tutorial.js#newcode18 chrome/browser/resources/md_user_manager/user_manager_tutorial.js:18: 'friends', On 2016/01/29 15:50:17, anthonyvd wrote: > nit: extra ...
4 years, 10 months ago (2016-02-01 01:11:14 UTC) #11
Mike Lerman
Cool, thanks! SigninCreateProfileHandler lgtm
4 years, 10 months ago (2016-02-01 16:11:20 UTC) #12
Dan Beam
tommycli@ is probably a better initial reviewer as he's been following the profile/user management with ...
4 years, 10 months ago (2016-02-01 20:03:34 UTC) #16
tommycli
On 2016/02/01 20:03:34, Dan Beam wrote: > tommycli@ is probably a better initial reviewer as ...
4 years, 10 months ago (2016-02-01 20:13:07 UTC) #17
tommycli
moe: I took a first pass, but didn't look through all the HTML and JS ...
4 years, 10 months ago (2016-02-03 01:13:22 UTC) #18
Moe
Addressed tommy's comments https://codereview.chromium.org/1630903002/diff/60001/chrome/browser/resources/md_user_manager/control_bar.css File chrome/browser/resources/md_user_manager/control_bar.css (right): https://codereview.chromium.org/1630903002/diff/60001/chrome/browser/resources/md_user_manager/control_bar.css#newcode39 chrome/browser/resources/md_user_manager/control_bar.css:39: right: 24px; On 2016/02/03 01:13:21, tommycli ...
4 years, 10 months ago (2016-02-05 17:58:39 UTC) #19
tommycli
Moe: we are getting closer. thanks! https://codereview.chromium.org/1630903002/diff/80001/chrome/browser/resources/md_user_manager/control_bar.html File chrome/browser/resources/md_user_manager/control_bar.html (right): https://codereview.chromium.org/1630903002/diff/80001/chrome/browser/resources/md_user_manager/control_bar.html#newcode8 chrome/browser/resources/md_user_manager/control_bar.html:8: <div id="login-header-bar" class="login-header-bar ...
4 years, 10 months ago (2016-02-08 18:45:19 UTC) #20
Moe
Thanks Tommy! Addressed your comments. https://codereview.chromium.org/1630903002/diff/80001/chrome/browser/resources/md_user_manager/control_bar.html File chrome/browser/resources/md_user_manager/control_bar.html (right): https://codereview.chromium.org/1630903002/diff/80001/chrome/browser/resources/md_user_manager/control_bar.html#newcode8 chrome/browser/resources/md_user_manager/control_bar.html:8: <div id="login-header-bar" class="login-header-bar layout ...
4 years, 10 months ago (2016-02-09 00:15:34 UTC) #21
tommycli
lgtm sans below, assuming the other reviewers have reviewed the C++ parts. https://codereview.chromium.org/1630903002/diff/100001/chrome/browser/resources/md_user_manager/user_manager.js File chrome/browser/resources/md_user_manager/user_manager.js ...
4 years, 10 months ago (2016-02-09 18:33:20 UTC) #22
Dan Beam
https://codereview.chromium.org/1630903002/diff/100001/chrome/browser/resources/md_user_manager/user_manager.js File chrome/browser/resources/md_user_manager/user_manager.js (right): https://codereview.chromium.org/1630903002/diff/100001/chrome/browser/resources/md_user_manager/user_manager.js#newcode57 chrome/browser/resources/md_user_manager/user_manager.js:57: * @param {string=} profilePath The profile's path. On 2016/02/09 ...
4 years, 10 months ago (2016-02-09 18:55:33 UTC) #23
Dan Beam
https://codereview.chromium.org/1630903002/diff/100001/chrome/browser/resources/md_user_manager/compiled_resources.gyp File chrome/browser/resources/md_user_manager/compiled_resources.gyp (right): https://codereview.chromium.org/1630903002/diff/100001/chrome/browser/resources/md_user_manager/compiled_resources.gyp#newcode3 chrome/browser/resources/md_user_manager/compiled_resources.gyp:3: # found in the LICENSE file. don't add this, ...
4 years, 10 months ago (2016-02-09 18:56:05 UTC) #24
Dan Beam
not lgtm https://codereview.chromium.org/1630903002/diff/100001/chrome/browser/ui/webui/signin/signin_create_profile_handler.cc File chrome/browser/ui/webui/signin/signin_create_profile_handler.cc (right): https://codereview.chromium.org/1630903002/diff/100001/chrome/browser/ui/webui/signin/signin_create_profile_handler.cc#newcode416 chrome/browser/ui/webui/signin/signin_create_profile_handler.cc:416: DCHECK(base::GetValueAsFilePath(*path_value, supervisor_profile_path)); all of this gets compiled ...
4 years, 10 months ago (2016-02-10 01:00:37 UTC) #25
Moe
https://codereview.chromium.org/1630903002/diff/100001/chrome/browser/resources/md_user_manager/compiled_resources.gyp File chrome/browser/resources/md_user_manager/compiled_resources.gyp (right): https://codereview.chromium.org/1630903002/diff/100001/chrome/browser/resources/md_user_manager/compiled_resources.gyp#newcode3 chrome/browser/resources/md_user_manager/compiled_resources.gyp:3: # found in the LICENSE file. On 2016/02/09 18:56:05, ...
4 years, 10 months ago (2016-02-10 22:28:09 UTC) #26
Dan Beam
i think this CL is too big you should split it up https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resources/md_user_manager/control_bar.css File chrome/browser/resources/md_user_manager/control_bar.css ...
4 years, 10 months ago (2016-02-12 23:42:25 UTC) #27
michaelpg
Sorry to only be bringing this up now, but I reeeeally think you should s/User/Profile ...
4 years, 10 months ago (2016-02-18 03:45:06 UTC) #28
Moe
4 years, 10 months ago (2016-02-20 00:21:00 UTC) #29
dbeam@ I addressed your comments and asked questions on the ones I wasn't sure
about. I will follow up by breaking this down into smaller CLs.

michaelpg@ Thanks for bringing this up. In the future CLs I will go ahead and
replace instances of "user" with "profile". I think profile and user are used
interchangeably in the the "user manager" a lot b/c mlerman@ originally forked
this feature from cros.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/control_bar.css (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/control_bar.css:4: */
On 2016/02/12 23:42:24, Dan Beam wrote:
> this should be on the previous line:
> 
>  * found in the LICENSE file. */

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/control_bar.html (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/control_bar.html:6: <link
rel="stylesheet" type="css" href="control_bar.css">
On 2016/02/12 23:42:24, Dan Beam wrote:
> this format is deprecated, see "shared styles"
> https://blog.polymer-project.org/announcements/2015/08/13/1.1-release/

if that's ok, I will change the format as a follow up CL. I have a few branches
based off of this at the moment. changing it will make rebasing those very
difficult and will probably introduce bugs. I will leave a comment here.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/control_bar.js (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/control_bar.js:16: 
On 2016/02/12 23:42:24, Dan Beam wrote:
> nit: remove \n

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/control_bar.js:42:
chrome.send('launchGuest');
On 2016/02/12 23:42:24, Dan Beam wrote:
> i would recommend abstracting this away so you can test this code more easily
> without global, browser side-effects

Makes sense. Done!

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/create_profile.css (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/create_profile.css:20: color: #333;
On 2016/02/12 23:42:24, Dan Beam wrote:
> should most of these colors be using a --google or --paper var()?

Ah! I didn't know those variables existed. Will replace those I can with
variables. Thank you.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/create_profile.css:21: font-family:
Roboto;
On 2016/02/12 23:42:24, Dan Beam wrote:
> nit: font: inherit; for both of these just makes this inner scope inherit the
> outer scope's rules

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/create_profile.css:51: padding: 6px 4px
6px 4px;
On 2016/02/12 23:42:24, Dan Beam wrote:
> padding: 6px 4px;

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/create_profile.html (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/create_profile.html:15: <link
rel="stylesheet" type="css" href="create_profile.css">
On 2016/02/12 23:42:24, Dan Beam wrote:
> nit: use type=css consistently between both of these lines (either both have
or
> both remove)

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/create_profile.html:54: <div
id="messageBubble" inner-h-t-m-l="{{message_}}"></div>
On 2016/02/12 23:42:24, Dan Beam wrote:
> w-a-t

used to set the element's innerHTML inside an observer for |message_|. @tommycli
suggested avoiding observers if possible with this syntax being an alternative.
However I've gotten rid of this in future iterations I have pipelined based on
this CL.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/create_profile.js (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/create_profile.js:96: detached:
function() {
On 2016/02/12 23:42:24, Dan Beam wrote:
> do you expect detached to ever be called?

Not at the moment. "detached" seemed to be the logical place to reset the
callbacks (question: is it important to reset them?). I am aware it is not being
called b/c the element is not being removed from the DOM. Once we fork the user
pods page and make it a polymer element, I'm planning to move all pages to the
user-manager-pages and use "dom-if" to attach and detach the page elements just
like settings page. If that's an acceptable approach by you i'll leave a TODO
for that.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/create_profile.js:168:
[this.profileName_, this.profileIconUrl_, false,
On 2016/02/12 23:42:24, Dan Beam wrote:
> indent off

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/profile_api.js (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/profile_api.js:7: var signedInUser;
On 2016/02/12 23:42:24, Dan Beam wrote:
> SignedInUser

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/profile_api.js:10: var profileInfo;
On 2016/02/12 23:42:24, Dan Beam wrote:
> ProfileInfo

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/profile_api.js:33:
ProfileApi.profileCreateSuccessCallback_ = null;
On 2016/02/12 23:42:24, Dan Beam wrote:
> why are you using globals?  this means that async tests can cause flakiness

I followed the pattern used in sync_private_api.js. What would you recommend to
use instead?

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/user_manager.css (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/user_manager.css:118: background-color:
rgb(117, 117, 117);
On 2016/02/12 23:42:24, Dan Beam wrote:
> why are you doing this? grey hex are OK
tommycli@ suggested colors that need more than 3 digits should use rgb. I'll
keep your comment in mind for the future.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/user_manager.html (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/user_manager.html:5: lang:language">
On 2016/02/12 23:42:24, Dan Beam wrote:
> nit: alphabetize

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/user_manager.html:67: <script
src="chrome://resources/js/cr/ui/grid.js"></script>
On 2016/02/12 23:42:24, Dan Beam wrote:
> you should be making .html files so these can be imported

I haven't created this file (i modified it heavily though). I've been trying to
keep the changes to this file minimal to avoid breaking things and not making
the CL larger than this. Most of these resources will likely go away once we
fork the user pods from cros and redo them in Polymer.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/user_manager.js (left):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/user_manager.js:76: * @param {string}
opt_email An optional email for signin UI.
On 2016/02/12 23:42:24, Dan Beam wrote:
> this was correct

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/user_manager.js (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/user_manager.js:4: */
On 2016/02/12 23:42:24, Dan Beam wrote:
> revert to single-line comments

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/user_manager.js:24: function Oobe() {}
On 2016/02/12 23:42:24, Dan Beam wrote:
> why is this file named user_manager.js but the class defined in it is named
> Oobe?

It looks like "user manager" was originally implemented taking advantage of a
lot of cros resources. I have been trying to keep the changes to this file
minimal to avoid breaking things. There will be follow ups in future to
re-implement the user pods and this page and divert from the cros.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/user_manager.js:44:
document.querySelector('control-bar').showAddPerson = showAddPerson;
On 2016/02/12 23:42:24, Dan Beam wrote:
> re-use the result of this querySelector

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/user_manager.js:72: * @param {string=}
optEmail An optional email for signin UI.
On 2016/02/12 23:42:24, Dan Beam wrote:
> opt_paramsLikeThis

Done.

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/user_manager_pages.js (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/user_manager_pages.js:32: 
On 2016/02/12 23:42:24, Dan Beam wrote:
> nit:
> 
> listeners: {
>   'change-page': 'changePage_',
> },
> 
> changePage_: function(e) {
>   this.selectedPage = e.detail.page,
> },

I struggled a lot with this syntax originally. it didn't worked. am I missing
something? Could it be that the event is not coming from the local DOM of the
element?

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
File chrome/browser/resources/md_user_manager/user_manager_tutorial.js (right):

https://codereview.chromium.org/1630903002/diff/120001/chrome/browser/resourc...
chrome/browser/resources/md_user_manager/user_manager_tutorial.js:107: 
On 2016/02/12 23:42:24, Dan Beam wrote:
> nit: remove \n

Done.

Powered by Google App Engine
This is Rietveld 408576698