|
|
Created:
4 years, 7 months ago by yoshiki Modified:
4 years, 7 months ago CC:
Aaron Boodman, abarth-chromium, ben+mojo_chromium.org, chromium-reviews, darin (slow to review), elijahtaylor+arcwatch_chromium.org, hidehiko+watch_chomium.org, kalyank, lhchavez+watch_chromium.org, qsr+mojo_chromium.org, sadrul, viettrungluu+watch_chromium.org, yusukes+watch_chromium.org, yzshen+watch_chromium.org Base URL:
https://chromium.googlesource.com/chromium/src.git@master Target Ref:
refs/pending/heads/master Project:
chromium Visibility:
Public. |
DescriptionSupport cancelling toast
This patch does:
- Add and implement ToastManager::Cancel(string) to cancel a toast
- Add ToastData to pass a toast data with one variable
- Make ArcToastData::text nullable since it is null in cancel request
BUG=b/25797993
TEST=manually tested
Committed: https://crrev.com/ac85029da05a81a1e46dbf43003f6750d710d111
Cr-Commit-Position: refs/heads/master@{#395627}
Patch Set 1 #Patch Set 2 : . #
Total comments: 13
Patch Set 3 : . #
Total comments: 7
Patch Set 4 : Addressed comment #Patch Set 5 : Use std::vector back instead of std::list #
Total comments: 20
Patch Set 6 : Addressed comments #
Total comments: 2
Patch Set 7 : Addressed comments #Patch Set 8 : Use std::deque instead of vector #
Messages
Total messages: 33 (13 generated)
Patchset #1 (id:1) has been deleted
Description was changed from ========== . BUG= ========== to ========== Support cancelling toast This patch does: - Add and implement ToastManager::Cancel(string) to cancel a toast - Add ToastData to pass a toast data with one variable - Make ArcToastData::text nullable since it is null in cancel request BUG=b/25797993 TEST=manually tested ==========
yoshiki@chromium.org changed reviewers: + oshima@chromium.org
yoshiki@chromium.org changed reviewers: + dcheng@chromium.org
Oshima-san, PTAL at ash changes. Daniel, PTAL at mojo changes. Thanks.
https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager.cc:73: serial_++; Can you just use id instead? Do we need both? https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... File ash/system/toast/toast_manager.h (right): https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager.h:38: using QueueElement = std::pair<std::string, ToastData>; toast data has id. Any particular reason to have an element type with id?
https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager.cc:29: std::find_if(std::begin(queue_), std::end(queue_), queue_.begin(), queue_.end() is a little more standard in this context, since we're not writing a generic template. Same elsewhere in this function. https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager.cc:35: queue_.emplace_back(std::make_pair(id, data)); queue_.emplace_back(id, data) is better: it avoids a potential conversion. https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... File ash/system/toast/toast_manager.h (right): https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager.h:48: std::string toast_id_; Add a comment what this is: ID of the currently displayed toast, or something. https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... File ash/system/toast/toast_manager_unittest.cc (right): https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager_unittest.cc:81: std::string id = "TOASAT_ID_" + base::UintToString(serial_++); Typo: TOAST_ID
Patchset #3 (id:60001) has been deleted
Patchset #3 (id:80001) has been deleted
Patchset #3 (id:100001) has been deleted
Oshima, Daniel, PTAL. Thanks. https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager.cc:29: std::find_if(std::begin(queue_), std::end(queue_), On 2016/05/17 02:57:25, dcheng wrote: > queue_.begin(), queue_.end() is a little more standard in this context, since > we're not writing a generic template. Same elsewhere in this function. Done. https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager.cc:35: queue_.emplace_back(std::make_pair(id, data)); On 2016/05/17 02:57:25, dcheng wrote: > queue_.emplace_back(id, data) is better: it avoids a potential conversion. Done. https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager.cc:73: serial_++; On 2016/05/16 22:37:25, oshima wrote: > Can you just use id instead? Do we need both? I'm using an internal serial number because "id" is data given from external and same id may come. Of cause, the same id doesn't exist at the same time, but another may come after one disappears. https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... File ash/system/toast/toast_manager.h (right): https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager.h:38: using QueueElement = std::pair<std::string, ToastData>; On 2016/05/16 22:37:25, oshima wrote: > toast data has id. Any particular reason to have an element type with id? Done. https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager.h:48: std::string toast_id_; On 2016/05/17 02:57:25, dcheng wrote: > Add a comment what this is: ID of the currently displayed toast, or something. Done. https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... File ash/system/toast/toast_manager_unittest.cc (right): https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager_unittest.cc:81: std::string id = "TOASAT_ID_" + base::UintToString(serial_++); On 2016/05/17 02:57:25, dcheng wrote: > Typo: TOAST_ID Done.
lgtm with nits https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/40001/ash/system/toast/toast_... ash/system/toast/toast_manager.cc:73: serial_++; On 2016/05/17 06:25:21, yoshiki wrote: > On 2016/05/16 22:37:25, oshima wrote: > > Can you just use id instead? Do we need both? > > I'm using an internal serial number because "id" is data given from external and > same id may come. Of cause, the same id doesn't exist at the same time, but > another may come after one disappears. Acknowledged. https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:28: Queue::iterator existing_toast = optional: you may use auto and remove using Queue. https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:33: // TODO(yoshiki): Replaces the toast; note: you can do this before looking up the toast. https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... File ash/system/toast/toast_manager.h (right): https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... ash/system/toast/toast_manager.h:38: using Queue = std::list<ToastData>; std::vector is usually faster: http://baptiste-wicht.com/posts/2012/11/cpp-benchmark-vector-vs-list.html The difference is most likely small, so you may keep it if you prefer.
mojom lgtm
yoshiki@chromium.org changed reviewers: + hidehiko@chromium.org
Hidehiko-san, PTAL at arc_notification_manager.cc? https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:28: Queue::iterator existing_toast = On 2016/05/18 16:59:44, oshima wrote: > optional: you may use auto and remove using Queue. Done. https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:33: // TODO(yoshiki): Replaces the toast; On 2016/05/18 16:59:44, oshima wrote: > note: you can do this before looking up the toast. Done. https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... File ash/system/toast/toast_manager.h (right): https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... ash/system/toast/toast_manager.h:38: using Queue = std::list<ToastData>; On 2016/05/18 16:59:44, oshima wrote: > std::vector is usually faster: > > http://baptiste-wicht.com/posts/2012/11/cpp-benchmark-vector-vs-list.html > > The difference is most likely small, so you may keep it if you prefer. Thank you for giving information. I use vector.
I'll take a look, but please fix compile errors in advance. On 2016/05/19 09:14:12, yoshiki wrote: > Hidehiko-san, PTAL at arc_notification_manager.cc? > > https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... > File ash/system/toast/toast_manager.cc (right): > > https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... > ash/system/toast/toast_manager.cc:28: Queue::iterator existing_toast = > On 2016/05/18 16:59:44, oshima wrote: > > optional: you may use auto and remove using Queue. > > Done. > > https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... > ash/system/toast/toast_manager.cc:33: // TODO(yoshiki): Replaces the toast; > On 2016/05/18 16:59:44, oshima wrote: > > note: you can do this before looking up the toast. > > Done. > > https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... > File ash/system/toast/toast_manager.h (right): > > https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... > ash/system/toast/toast_manager.h:38: using Queue = std::list<ToastData>; > On 2016/05/18 16:59:44, oshima wrote: > > std::vector is usually faster: > > > > http://baptiste-wicht.com/posts/2012/11/cpp-benchmark-vector-vs-list.html > > > > The difference is most likely small, so you may keep it if you prefer. > > Thank you for giving information. I use vector.
Hidehiko-san, sorry, last minute change broke the build. I fixed. https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... File ash/system/toast/toast_manager.h (right): https://codereview.chromium.org/1978313002/diff/120001/ash/system/toast/toast... ash/system/toast/toast_manager.h:38: using Queue = std::list<ToastData>; On 2016/05/19 09:14:12, yoshiki wrote: > On 2016/05/18 16:59:44, oshima wrote: > > std::vector is usually faster: > > > > http://baptiste-wicht.com/posts/2012/11/cpp-benchmark-vector-vs-list.html > > > > The difference is most likely small, so you may keep it if you prefer. > > Thank you for giving information. I use vector. Let me use std::list, since the vector doesn't have pop_front.
https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:55: [id](const ToastData& data) { return data.id == id; }); &id https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:65: if (queue_.size() != 0) nit: !queue_.empty() https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:72: const ToastData& data = queue_.front(); // Can be used until pop_front(). I'd recommend: ToastData data = std::move(queue_.top()); queue_.pop_front(); https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:76: serial_++; Because you manage the toast UI by ID (in Cancel), serial_ looks unnecessary? https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:78: overlay_.reset(new ToastOverlay(this, data.text /* text */)); /* text */ looks unnecessary now. https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... File ash/system/toast/toast_manager.h (right): https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.h:50: std::list<ToastData> queue_; Or, deque? https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... File ash/system/toast/toast_manager_unittest.cc (right): https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager_unittest.cc:288: How about adding one more toast, so that cancelling id2 will not cancel id3 thus id3 should be shown after id1's cancel?
Hidehiko-san, PTAL https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:55: [id](const ToastData& data) { return data.id == id; }); On 2016/05/20 07:46:53, hidehiko wrote: > &id Done. https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:65: if (queue_.size() != 0) On 2016/05/20 07:46:53, hidehiko wrote: > nit: !queue_.empty() Done. https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:72: const ToastData& data = queue_.front(); // Can be used until pop_front(). On 2016/05/20 07:46:53, hidehiko wrote: > I'd recommend: > > ToastData data = std::move(queue_.top()); > queue_.pop_front(); Done. https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:76: serial_++; On 2016/05/20 07:46:53, hidehiko wrote: > Because you manage the toast UI by ID (in Cancel), serial_ looks unnecessary? Same ID may come at the timing after the toast is cancelled but before the delayed task remains. In current ARC implementation it doesn't happens, but other user might do it. So I use the internal ID. See the previous discussion in this codereview as well. https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:78: overlay_.reset(new ToastOverlay(this, data.text /* text */)); On 2016/05/20 07:46:53, hidehiko wrote: > /* text */ looks unnecessary now. Done. https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... File ash/system/toast/toast_manager_unittest.cc (right): https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager_unittest.cc:288: On 2016/05/20 07:46:53, hidehiko wrote: > How about adding one more toast, so that cancelling id2 will not cancel id3 thus > id3 should be shown after id1's cancel? Done.
(Drive-by) https://codereview.chromium.org/1978313002/diff/180001/ash/system/toast/toast... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/180001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:55: [id](const ToastData& data) { return data.id == id; }); (This should probably also capture by ref as well)
https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:55: [id](const ToastData& data) { return data.id == id; }); On 2016/05/20 08:14:55, yoshiki wrote: > On 2016/05/20 07:46:53, hidehiko wrote: > > &id > > Done. Not done? https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:72: const ToastData& data = queue_.front(); // Can be used until pop_front(). On 2016/05/20 08:14:54, yoshiki wrote: > On 2016/05/20 07:46:53, hidehiko wrote: > > I'd recommend: > > > > ToastData data = std::move(queue_.top()); > > queue_.pop_front(); > > Done. I meant, getting rid of ref, so that you can pop just after this line. https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... File ash/system/toast/toast_manager.h (right): https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.h:50: std::list<ToastData> queue_; On 2016/05/20 07:46:53, hidehiko wrote: > Or, deque? ping?
Patchset #7 (id:200001) has been deleted
Hidehiko-san, PTAL https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:55: [id](const ToastData& data) { return data.id == id; }); On 2016/05/20 08:52:41, hidehiko wrote: > On 2016/05/20 08:14:55, yoshiki wrote: > > On 2016/05/20 07:46:53, hidehiko wrote: > > > &id > > > > Done. > > Not done? I did the first one but forgot the second one (this). Done. https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:72: const ToastData& data = queue_.front(); // Can be used until pop_front(). On 2016/05/20 08:52:41, hidehiko wrote: > On 2016/05/20 08:14:54, yoshiki wrote: > > On 2016/05/20 07:46:53, hidehiko wrote: > > > I'd recommend: > > > > > > ToastData data = std::move(queue_.top()); > > > queue_.pop_front(); > > > > Done. > > I meant, getting rid of ref, so that you can pop just after this line. Oh, I see. Done. https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... File ash/system/toast/toast_manager.h (right): https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.h:50: std::list<ToastData> queue_; On 2016/05/20 08:52:41, hidehiko wrote: > On 2016/05/20 07:46:53, hidehiko wrote: > > Or, deque? > > ping? I think there is no big difference between deque and list. Let me use list. https://codereview.chromium.org/1978313002/diff/180001/ash/system/toast/toast... File ash/system/toast/toast_manager.cc (right): https://codereview.chromium.org/1978313002/diff/180001/ash/system/toast/toast... ash/system/toast/toast_manager.cc:55: [id](const ToastData& data) { return data.id == id; }); On 2016/05/20 08:16:33, dcheng wrote: > (This should probably also capture by ref as well) Thank you for letting me know!
lgtm, but please see my comment below, too. https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... File ash/system/toast/toast_manager.h (right): https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... ash/system/toast/toast_manager.h:50: std::list<ToastData> queue_; On 2016/05/20 09:30:31, yoshiki wrote: > On 2016/05/20 08:52:41, hidehiko wrote: > > On 2016/05/20 07:46:53, hidehiko wrote: > > > Or, deque? > > > > ping? > > I think there is no big difference between deque and list. Let me use list. IIUC, you gave it a try to replace this with vector for performance, but you gave up just be cause of pop-front, right? Then, deque should be the one you'd use. cf) http://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html
On 2016/05/20 14:08:33, hidehiko wrote: > lgtm, but please see my comment below, too. > > https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... > File ash/system/toast/toast_manager.h (right): > > https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... > ash/system/toast/toast_manager.h:50: std::list<ToastData> queue_; > On 2016/05/20 09:30:31, yoshiki wrote: > > On 2016/05/20 08:52:41, hidehiko wrote: > > > On 2016/05/20 07:46:53, hidehiko wrote: > > > > Or, deque? > > > > > > ping? > > > > I think there is no big difference between deque and list. Let me use list. > > IIUC, you gave it a try to replace this with vector for performance, but you > gave up just be cause of pop-front, right? > Then, deque should be the one you'd use. > > cf) http://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html pop_front in vector is v.erase(v.begin()); deque is fine too.
On 2016/05/20 16:56:12, oshima wrote: > On 2016/05/20 14:08:33, hidehiko wrote: > > lgtm, but please see my comment below, too. > > > > > https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... > > File ash/system/toast/toast_manager.h (right): > > > > > https://codereview.chromium.org/1978313002/diff/160001/ash/system/toast/toast... > > ash/system/toast/toast_manager.h:50: std::list<ToastData> queue_; > > On 2016/05/20 09:30:31, yoshiki wrote: > > > On 2016/05/20 08:52:41, hidehiko wrote: > > > > On 2016/05/20 07:46:53, hidehiko wrote: > > > > > Or, deque? > > > > > > > > ping? > > > > > > I think there is no big difference between deque and list. Let me use list. > > > > IIUC, you gave it a try to replace this with vector for performance, but you > > gave up just be cause of pop-front, right? > > Then, deque should be the one you'd use. > > > > cf) > http://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html > > pop_front in vector is v.erase(v.begin()); > > deque is fine too. Thanks. I use deque.
The CQ bit was checked by yoshiki@chromium.org
The patchset sent to the CQ was uploaded after l-g-t-m from oshima@chromium.org, dcheng@chromium.org, hidehiko@chromium.org Link to the patchset: https://codereview.chromium.org/1978313002/#ps240001 (title: "Use std::deque instead of vector")
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1978313002/240001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1978313002/240001
Message was sent while issue was closed.
Description was changed from ========== Support cancelling toast This patch does: - Add and implement ToastManager::Cancel(string) to cancel a toast - Add ToastData to pass a toast data with one variable - Make ArcToastData::text nullable since it is null in cancel request BUG=b/25797993 TEST=manually tested ========== to ========== Support cancelling toast This patch does: - Add and implement ToastManager::Cancel(string) to cancel a toast - Add ToastData to pass a toast data with one variable - Make ArcToastData::text nullable since it is null in cancel request BUG=b/25797993 TEST=manually tested ==========
Message was sent while issue was closed.
Committed patchset #8 (id:240001)
Message was sent while issue was closed.
Description was changed from ========== Support cancelling toast This patch does: - Add and implement ToastManager::Cancel(string) to cancel a toast - Add ToastData to pass a toast data with one variable - Make ArcToastData::text nullable since it is null in cancel request BUG=b/25797993 TEST=manually tested ========== to ========== Support cancelling toast This patch does: - Add and implement ToastManager::Cancel(string) to cancel a toast - Add ToastData to pass a toast data with one variable - Make ArcToastData::text nullable since it is null in cancel request BUG=b/25797993 TEST=manually tested Committed: https://crrev.com/ac85029da05a81a1e46dbf43003f6750d710d111 Cr-Commit-Position: refs/heads/master@{#395627} ==========
Message was sent while issue was closed.
Patchset 8 (id:??) landed as https://crrev.com/ac85029da05a81a1e46dbf43003f6750d710d111 Cr-Commit-Position: refs/heads/master@{#395627} |