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

Issue 2557363002: [NTP Snippets] Refactor background scheduling for remote suggestions (Closed)

Created:
4 years ago by jkrcal
Modified:
4 years ago
CC:
chromium-reviews, pkl (ping after 24h if needed), ntp-dev+reviews_chromium.org, sdefresne+watch_chromium.org
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

[NTP Snippets] Refactor background scheduling for remote suggestions This CL splits off scheduling functionality from RemoteSuggestionsProvider into a separate class. RemoteSuggestionsProvider is a complex class. This is to prepare for further work on soft-scheduled updates (wich makes scheduling slightly more complex). The CL also renames the getter for RemoteSuggestionsProvider as it would anyway touch almost all of its callers. BUG=672479 Committed: https://crrev.com/093410c469a8105341cdf0062e65a5c5ac0ef4b8 Cr-Commit-Position: refs/heads/master@{#440116}

Patch Set 1 #

Total comments: 8

Patch Set 2 : Rebase #

Patch Set 3 : Marc's comments #1 #

Total comments: 5

Patch Set 4 : Make unit-tests pass #

Total comments: 82

Patch Set 5 : Take two #

Patch Set 6 : Small fixes #

Patch Set 7 : Small fixes #2 #

Patch Set 8 : Rebase #

Total comments: 36

Patch Set 9 : Tim's comments some unit-test changes ( rebase, sorry about it!) #

Patch Set 10 : Rebase #2 #

Patch Set 11 : Tim's comments and splitting RemoteSuggestionsProvider and RemoteSuggestionsProviderImpl #

Total comments: 77

Patch Set 12 : Addressing many comments #

Total comments: 4

Patch Set 13 : Rebase #

Total comments: 2

Patch Set 14 : Changes to make unit-tests pass #

Total comments: 1

Patch Set 15 : A minor fix #

Total comments: 2

Patch Set 16 : Rebase #

Patch Set 17 : Eric's comment #

Total comments: 10

Patch Set 18 : Tim's comments + fix ios compilation #

Total comments: 23

Patch Set 19 : Tim's and Bernhard's comments #

Patch Set 20 : Tim's and Bernhard's comments #2 #

Patch Set 21 : Fixing the last changes :) #

Unified diffs Side-by-side diffs Delta from patch set Stats (+1436 lines, -4293 lines) Patch
M chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsBridge.java View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 chunks +9 lines, -7 lines 0 comments Download
M chrome/browser/android/ntp/ntp_snippets_bridge.h View 1 2 3 4 5 6 7 8 9 10 11 12 1 chunk +4 lines, -0 lines 0 comments Download
M chrome/browser/android/ntp/ntp_snippets_bridge.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 5 chunks +23 lines, -40 lines 0 comments Download
M chrome/browser/android/ntp/ntp_snippets_launcher.h View 1 2 3 4 1 chunk +3 lines, -2 lines 0 comments Download
M chrome/browser/ntp_snippets/content_suggestions_service_factory.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 5 chunks +21 lines, -12 lines 0 comments Download
M chrome/browser/prefs/browser_prefs.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 2 chunks +6 lines, -3 lines 0 comments Download
M chrome/browser/ui/webui/snippets_internals_message_handler.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 7 chunks +15 lines, -12 lines 0 comments Download
M components/ntp_snippets/BUILD.gn View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 chunks +8 lines, -2 lines 0 comments Download
M components/ntp_snippets/content_suggestions_provider.h View 1 2 3 4 5 6 7 8 9 10 11 12 1 chunk +6 lines, -0 lines 0 comments Download
M components/ntp_snippets/content_suggestions_service.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 4 chunks +42 lines, -13 lines 0 comments Download
M components/ntp_snippets/content_suggestions_service.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 3 chunks +10 lines, -2 lines 0 comments Download
D components/ntp_snippets/remote/ntp_snippets_scheduler.h View 1 chunk +0 lines, -36 lines 0 comments Download
A components/ntp_snippets/remote/persistent_scheduler.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +47 lines, -0 lines 0 comments Download
M components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h View 1 2 3 4 1 chunk +0 lines, -38 lines 0 comments Download
M components/ntp_snippets/remote/remote_suggestions_provider.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 chunk +35 lines, -427 lines 0 comments Download
M components/ntp_snippets/remote/remote_suggestions_provider.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 chunk +3 lines, -1341 lines 0 comments Download
A + components/ntp_snippets/remote/remote_suggestions_provider_impl.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 13 chunks +50 lines, -49 lines 0 comments Download
A + components/ntp_snippets/remote/remote_suggestions_provider_impl.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 45 chunks +133 lines, -183 lines 0 comments Download
A + components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 59 chunks +206 lines, -227 lines 0 comments Download
D components/ntp_snippets/remote/remote_suggestions_provider_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 chunk +0 lines, -1829 lines 0 comments Download
M components/ntp_snippets/remote/remote_suggestions_scheduler.h View 1 2 3 4 5 6 7 8 9 10 11 1 chunk +6 lines, -43 lines 0 comments Download
A components/ntp_snippets/remote/scheduling_remote_suggestions_provider.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 chunk +147 lines, -0 lines 0 comments Download
A components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 chunk +329 lines, -0 lines 0 comments Download
A components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 chunk +296 lines, -0 lines 0 comments Download
M ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 4 chunks +32 lines, -25 lines 0 comments Download
M ios/chrome/browser/prefs/browser_prefs.mm View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 2 chunks +5 lines, -2 lines 0 comments Download

Dependent Patchsets:

Messages

Total messages: 68 (25 generated)
jkrcal
Marc, could you PTAL? (It has grown a bit, I am sorry about it. I ...
4 years ago (2016-12-08 14:54:12 UTC) #3
Marc Treib
First few comments, but mostly: The diff is incomplete; looks like it's based on some ...
4 years ago (2016-12-08 16:14:58 UTC) #4
jkrcal
Marc, thanks! PTAL, again. https://codereview.chromium.org/2557363002/diff/1/components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h File components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h (right): https://codereview.chromium.org/2557363002/diff/1/components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h#newcode6 components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h:6: #define COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_HARD_SCHEDULER_H_ On 2016/12/08 16:14:58, ...
4 years ago (2016-12-09 09:20:38 UTC) #5
jkrcal
+Markus as cc (sorry, I've forgotten)
4 years ago (2016-12-09 10:14:52 UTC) #6
Marc Treib
Comment re previously added headers below. Reviewing now. https://codereview.chromium.org/2557363002/diff/1/components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h File components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h (right): https://codereview.chromium.org/2557363002/diff/1/components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h#newcode6 components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h:6: #define ...
4 years ago (2016-12-09 10:55:37 UTC) #7
Marc Treib
https://codereview.chromium.org/2557363002/diff/40001/components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h File components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h (right): https://codereview.chromium.org/2557363002/diff/40001/components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h#newcode16 components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h:16: class RemoteSuggestionsHardScheduler { I'm not very happy with this ...
4 years ago (2016-12-09 12:25:28 UTC) #10
tschumann
some bystander comments on overall design. https://codereview.chromium.org/2557363002/diff/60001/chrome/browser/android/ntp/ntp_snippets_bridge.cc File chrome/browser/android/ntp/ntp_snippets_bridge.cc (right): https://codereview.chromium.org/2557363002/diff/60001/chrome/browser/android/ntp/ntp_snippets_bridge.cc#newcode141 chrome/browser/android/ntp/ntp_snippets_bridge.cc:141: remote_suggestions_provider->scheduler()->PerformHardUpdate(); this is ...
4 years ago (2016-12-09 17:27:28 UTC) #14
markusheintz_
https://codereview.chromium.org/2557363002/diff/60001/components/ntp_snippets/remote/remote_suggestions_provider.cc File components/ntp_snippets/remote/remote_suggestions_provider.cc (right): https://codereview.chromium.org/2557363002/diff/60001/components/ntp_snippets/remote/remote_suggestions_provider.cc#newcode179 components/ntp_snippets/remote/remote_suggestions_provider.cc:179: RemoteSuggestionsHardScheduler* hard_scheduler, Should we pass in the scheduler instead ...
4 years ago (2016-12-12 14:36:16 UTC) #16
markusheintz_
On a second thought I guess the relation ship between the individual components is more ...
4 years ago (2016-12-12 15:32:28 UTC) #17
jkrcal
Tim, Marc, Markus, [The CL is not complete, I did adapt fix unit-tests nor addressed ...
4 years ago (2016-12-14 09:42:10 UTC) #18
Marc Treib
On 2016/12/14 09:42:10, jkrcal wrote: > The main change is that I've put SchedulingRemoteSuggestionsProvider as ...
4 years ago (2016-12-14 10:46:47 UTC) #19
Marc Treib
https://codereview.chromium.org/2557363002/diff/40001/components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h File components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h (right): https://codereview.chromium.org/2557363002/diff/40001/components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h#newcode16 components/ntp_snippets/remote/remote_suggestions_hard_scheduler.h:16: class RemoteSuggestionsHardScheduler { On 2016/12/14 09:42:09, jkrcal wrote: > ...
4 years ago (2016-12-14 10:47:02 UTC) #20
markusheintz_
On 2016/12/14 09:42:10, jkrcal wrote: > Tim, Marc, Markus, > > [The CL is not ...
4 years ago (2016-12-14 21:02:13 UTC) #21
tschumann
https://codereview.chromium.org/2557363002/diff/140001/chrome/browser/android/ntp/ntp_snippets_launcher.h File chrome/browser/android/ntp/ntp_snippets_launcher.h (right): https://codereview.chromium.org/2557363002/diff/140001/chrome/browser/android/ntp/ntp_snippets_launcher.h#newcode18 chrome/browser/android/ntp/ntp_snippets_launcher.h:18: : public ntp_snippets::PersistentScheduler { sorry for joining the naming ...
4 years ago (2016-12-15 14:12:11 UTC) #22
tschumann
some more comments on the other code. some might be obsolete, but I wanted to ...
4 years ago (2016-12-15 19:27:01 UTC) #23
jkrcal
PTAL, again. When diving into unit-tests, I realized that I cannot mock the RemoteSuggestionsProvider to ...
4 years ago (2016-12-19 09:40:24 UTC) #24
tschumann
https://codereview.chromium.org/2557363002/diff/200001/components/ntp_snippets/content_suggestions_service.cc File components/ntp_snippets/content_suggestions_service.cc (right): https://codereview.chromium.org/2557363002/diff/200001/components/ntp_snippets/content_suggestions_service.cc#newcode33 components/ntp_snippets/content_suggestions_service.cc:33: remote_suggestions_scheduler_(nullptr), why do we need both? Shouldn't the SchedulingRemoteSuggestionsProvider ...
4 years ago (2016-12-19 11:07:19 UTC) #25
tschumann
4 years ago (2016-12-19 11:07:21 UTC) #26
tschumann
following up on the other comments (missed them when only looking at the latest snapshot). ...
4 years ago (2016-12-19 11:19:24 UTC) #27
Marc Treib
Bunch of comments, but nothing major. The general design looks good, thanks! https://codereview.chromium.org/2557363002/diff/200001/components/ntp_snippets/content_suggestions_service.cc File components/ntp_snippets/content_suggestions_service.cc ...
4 years ago (2016-12-19 12:59:24 UTC) #28
tschumann
https://codereview.chromium.org/2557363002/diff/200001/components/ntp_snippets/content_suggestions_service.cc File components/ntp_snippets/content_suggestions_service.cc (right): https://codereview.chromium.org/2557363002/diff/200001/components/ntp_snippets/content_suggestions_service.cc#newcode33 components/ntp_snippets/content_suggestions_service.cc:33: remote_suggestions_scheduler_(nullptr), On 2016/12/19 12:59:23, Marc Treib (OOO until Jan ...
4 years ago (2016-12-19 14:17:08 UTC) #29
jkrcal
Tim, finally I finished the CL to a state where it passes unit-tests and have ...
4 years ago (2016-12-20 16:39:47 UTC) #30
jkrcal
Bernhard, could you PTAL at chrome/ stuff? (if you do not make it before going ...
4 years ago (2016-12-20 16:49:22 UTC) #32
noyau (Ping after 24h)
https://codereview.chromium.org/2557363002/diff/280001/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc File ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc (right): https://codereview.chromium.org/2557363002/diff/280001/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc#newcode184 ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc:184: /*persistent_scheduler=*/nullptr, service->user_classifier(), This code creates a SchedulingRemoteSuggestionsProvider with a ...
4 years ago (2016-12-20 17:02:20 UTC) #33
jkrcal
https://codereview.chromium.org/2557363002/diff/280001/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc File ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc (right): https://codereview.chromium.org/2557363002/diff/280001/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc#newcode184 ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc:184: /*persistent_scheduler=*/nullptr, service->user_classifier(), On 2016/12/20 17:02:20, noyau wrote: > This ...
4 years ago (2016-12-20 17:06:16 UTC) #34
noyau (Ping after 24h)
On 2016/12/20 17:06:16, jkrcal wrote: > https://codereview.chromium.org/2557363002/diff/280001/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc > File > ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc > (right): > > ...
4 years ago (2016-12-20 17:20:26 UTC) #35
noyau (Ping after 24h)
On 2016/12/20 17:20:26, noyau wrote: > On 2016/12/20 17:06:16, jkrcal wrote: > > > https://codereview.chromium.org/2557363002/diff/280001/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc ...
4 years ago (2016-12-20 17:58:37 UTC) #36
noyau (Ping after 24h)
lgtm, once the TODO and bugs have been added.
4 years ago (2016-12-20 17:59:04 UTC) #37
jkrcal
On 2016/12/20 17:59:04, noyau wrote: > lgtm, once the TODO and bugs have been added. ...
4 years ago (2016-12-21 07:36:32 UTC) #38
tschumann
following up on comments. will review scheduling_remote_suggestions_provider_unittest.cc soon ;-) https://codereview.chromium.org/2557363002/diff/200001/components/ntp_snippets/content_suggestions_service.cc File components/ntp_snippets/content_suggestions_service.cc (right): https://codereview.chromium.org/2557363002/diff/200001/components/ntp_snippets/content_suggestions_service.cc#newcode33 components/ntp_snippets/content_suggestions_service.cc:33: ...
4 years ago (2016-12-21 08:21:18 UTC) #43
jkrcal
Thanks, Tim! https://codereview.chromium.org/2557363002/diff/200001/components/ntp_snippets/content_suggestions_service.cc File components/ntp_snippets/content_suggestions_service.cc (right): https://codereview.chromium.org/2557363002/diff/200001/components/ntp_snippets/content_suggestions_service.cc#newcode33 components/ntp_snippets/content_suggestions_service.cc:33: remote_suggestions_scheduler_(nullptr), On 2016/12/21 08:21:18, tschumann wrote: > ...
4 years ago (2016-12-21 08:40:49 UTC) #46
tschumann
nice tests! just some nits around the mock implementation. https://codereview.chromium.org/2557363002/diff/320001/components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc File components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc (right): https://codereview.chromium.org/2557363002/diff/320001/components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc#newcode55 components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc:55: ...
4 years ago (2016-12-21 09:41:02 UTC) #47
Bernhard Bauer
https://codereview.chromium.org/2557363002/diff/340001/chrome/browser/ui/webui/snippets_internals_message_handler.cc File chrome/browser/ui/webui/snippets_internals_message_handler.cc (right): https://codereview.chromium.org/2557363002/diff/340001/chrome/browser/ui/webui/snippets_internals_message_handler.cc#newcode272 chrome/browser/ui/webui/snippets_internals_message_handler.cc:272: std::unique_ptr<RemoteSuggestionsProvider::FetchStatusCallback>(nullptr)); Can you see whether just passing nullptr directly ...
4 years ago (2016-12-21 10:38:43 UTC) #50
jkrcal
Thanks for all the helpful comments! PTAl, again. https://codereview.chromium.org/2557363002/diff/320001/components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc File components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc (right): https://codereview.chromium.org/2557363002/diff/320001/components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc#newcode55 components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc:55: const ...
4 years ago (2016-12-21 11:54:41 UTC) #51
Bernhard Bauer
https://codereview.chromium.org/2557363002/diff/340001/components/ntp_snippets/remote/remote_suggestions_provider.h File components/ntp_snippets/remote/remote_suggestions_provider.h (right): https://codereview.chromium.org/2557363002/diff/340001/components/ntp_snippets/remote/remote_suggestions_provider.h#newcode26 components/ntp_snippets/remote/remote_suggestions_provider.h:26: enum ProviderStatus { ACTIVE, INACTIVE }; On 2016/12/21 11:54:40, ...
4 years ago (2016-12-21 12:24:36 UTC) #52
jkrcal
I also implemented the unit-test changes suggested by Tim (letting the Mock be just a ...
4 years ago (2016-12-21 12:41:21 UTC) #53
tschumann
lgtm https://codereview.chromium.org/2557363002/diff/340001/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc File components/ntp_snippets/remote/remote_suggestions_provider_impl.cc (right): https://codereview.chromium.org/2557363002/diff/340001/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc#newcode958 components/ntp_snippets/remote/remote_suggestions_provider_impl.cc:958: fetch_when_ready_callback_.reset(); On 2016/12/21 12:24:36, Bernhard Bauer wrote: > ...
4 years ago (2016-12-21 12:42:52 UTC) #54
Bernhard Bauer
LGTM https://codereview.chromium.org/2557363002/diff/340001/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc File components/ntp_snippets/remote/remote_suggestions_provider_impl.cc (right): https://codereview.chromium.org/2557363002/diff/340001/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc#newcode958 components/ntp_snippets/remote/remote_suggestions_provider_impl.cc:958: fetch_when_ready_callback_.reset(); On 2016/12/21 12:41:20, jkrcal wrote: > On ...
4 years ago (2016-12-21 13:16:33 UTC) #57
tschumann
lgtm https://codereview.chromium.org/2557363002/diff/340001/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc File components/ntp_snippets/remote/remote_suggestions_provider_impl.cc (right): https://codereview.chromium.org/2557363002/diff/340001/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc#newcode958 components/ntp_snippets/remote/remote_suggestions_provider_impl.cc:958: fetch_when_ready_callback_.reset(); On 2016/12/21 13:16:33, Bernhard Bauer wrote: > ...
4 years ago (2016-12-21 13:33:47 UTC) #59
jkrcal
Thanks! https://codereview.chromium.org/2557363002/diff/340001/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc File components/ntp_snippets/remote/remote_suggestions_provider_impl.cc (right): https://codereview.chromium.org/2557363002/diff/340001/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc#newcode958 components/ntp_snippets/remote/remote_suggestions_provider_impl.cc:958: fetch_when_ready_callback_.reset(); On 2016/12/21 13:33:47, tschumann wrote: > On ...
4 years ago (2016-12-21 14:22:56 UTC) #60
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.org/2557363002/400001
4 years ago (2016-12-21 16:06:12 UTC) #63
commit-bot: I haz the power
Committed patchset #21 (id:400001)
4 years ago (2016-12-21 16:14:31 UTC) #66
commit-bot: I haz the power
4 years ago (2016-12-21 16:17:43 UTC) #68
Message was sent while issue was closed.
Patchset 21 (id:??) landed as
https://crrev.com/093410c469a8105341cdf0062e65a5c5ac0ef4b8
Cr-Commit-Position: refs/heads/master@{#440116}

Powered by Google App Engine
This is Rietveld 408576698