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

Issue 1076063002: Remove certificates from Channel ID (Closed)

Created:
5 years, 8 months ago by nharper
Modified:
5 years, 6 months ago
CC:
cbentzel+watch_chromium.org, chromium-apps-reviews_chromium.org, chromium-reviews, extensions-reviews_chromium.org
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

Remove certificates from Channel ID When creating a new Channel ID, an X.509 certificate is created, even though only the keypair is used. This CL removes the generation and storage of certificates for Channel ID and updates the callsites to use the modified API that only exposes a crypto::ECPrivateKey. BUG=457566 Committed: https://crrev.com/2e171cf4d960a6c723a529b2a4cbceb075bcd306 Cr-Commit-Position: refs/heads/master@{#332260}

Patch Set 1 #

Total comments: 88

Patch Set 2 : Fix some small style/formatting issues #

Total comments: 63

Patch Set 3 : cleanup #

Total comments: 6

Patch Set 4 : fix min compat version number; use make_scoped_ptr; find and restore the changes that got dropped #

Total comments: 4

Patch Set 5 : fix bad merge #

Patch Set 6 : ASSERT_NE(nullptr, key.get()) => ASSERT_TRUE(key) #

Patch Set 7 : major refactor: push transition to crypto::ECPrivateKey as low as possible #

Total comments: 8

Patch Set 8 : rebase #

Total comments: 31

Patch Set 9 : cleanup #

Patch Set 10 : Refactor HandleResult and its callees to use scoped_ptr #

Total comments: 10

Patch Set 11 : minor nits: use make_scoped_ptr, clean asan/lsan test run #

Patch Set 12 : rebase #

Patch Set 13 : fix extension_messages_apitest.cc #

Patch Set 14 : Move ExpectKeysEqual into new channel_id_test_util (it will be needed in even more unittests) #

Patch Set 15 : Update more unittests that touch channel id #

Patch Set 16 : Add missing parts of patch sets 14 and 15; fix an msvc compiler error #

Patch Set 17 : Check that key is not null before copying it #

Patch Set 18 : rebase #

Patch Set 19 : Fix mixplaced close paren #

Total comments: 2

Patch Set 20 : Combine ExpectKeysEqual and ExpectKeysNotEqual into one method which returns a ::testing::Assertion… #

Total comments: 5

Patch Set 21 : Udpate KeysEqual to fail if preconditions fail #

Unified diffs Side-by-side diffs Delta from patch set Stats (+851 lines, -1841 lines) Patch
M chrome/browser/browsing_data/browsing_data_channel_id_helper_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 3 chunks +11 lines, -7 lines 0 comments Download
M chrome/browser/browsing_data/browsing_data_remover_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 3 chunks +9 lines, -15 lines 0 comments Download
M chrome/browser/browsing_data/mock_browsing_data_channel_id_helper.cc View 1 2 3 4 5 6 7 8 9 10 11 12 1 chunk +2 lines, -2 lines 0 comments Download
M chrome/browser/chromeos/login/profile_auth_data_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 9 chunks +22 lines, -30 lines 0 comments Download
M chrome/browser/extensions/api/messaging/message_property_provider.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 4 chunks +9 lines, -10 lines 0 comments Download
M chrome/browser/extensions/extension_messages_apitest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 3 chunks +15 lines, -21 lines 0 comments Download
M chrome/browser/net/quota_policy_channel_id_store_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 6 chunks +19 lines, -27 lines 0 comments Download
M net/BUILD.gn View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 chunk +2 lines, -0 lines 0 comments Download
M net/base/net_error_list.h View 1 2 3 4 5 6 7 8 9 10 11 1 chunk +1 line, -2 lines 0 comments Download
M net/cert/x509_util.h View 1 chunk +0 lines, -24 lines 0 comments Download
M net/cert/x509_util.cc View 1 chunk +0 lines, -23 lines 0 comments Download
M net/cert/x509_util_nss.cc View 1 2 3 4 2 chunks +0 lines, -122 lines 0 comments Download
D net/cert/x509_util_nss_unittest.cc View 1 chunk +0 lines, -170 lines 0 comments Download
M net/cert/x509_util_openssl.cc View 1 2 3 4 5 6 7 2 chunks +0 lines, -83 lines 0 comments Download
M net/cert/x509_util_openssl_unittest.cc View 2 chunks +0 lines, -98 lines 0 comments Download
M net/data/ssl/certificates/unittest.originbound.der View 1 2 3 4 5 6 Binary file 0 comments Download
M net/data/ssl/certificates/unittest.originbound.key.der View 1 2 3 4 5 6 Binary file 0 comments Download
M net/extras/sqlite/sqlite_channel_id_store.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 chunks +80 lines, -127 lines 0 comments Download
M net/extras/sqlite/sqlite_channel_id_store_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 18 chunks +113 lines, -88 lines 0 comments Download
M net/net.gyp View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 chunk +2 lines, -0 lines 0 comments Download
M net/net.gypi View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 chunk +0 lines, -1 line 0 comments Download
M net/quic/crypto/channel_id_chromium.h View 1 2 1 chunk +2 lines, -1 line 0 comments Download
M net/quic/crypto/channel_id_chromium.cc View 1 2 3 4 5 6 7 8 4 chunks +8 lines, -25 lines 0 comments Download
M net/quic/test_tools/crypto_test_utils_nss.cc View 1 2 3 2 chunks +3 lines, -3 lines 0 comments Download
M net/socket/ssl_client_socket.cc View 1 2 3 4 5 6 7 3 chunks +1 line, -7 lines 0 comments Download
M net/socket/ssl_client_socket_nss.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 5 chunks +9 lines, -35 lines 0 comments Download
M net/socket/ssl_client_socket_openssl.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 chunk +1 line, -2 lines 0 comments Download
M net/socket/ssl_client_socket_openssl.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 3 chunks +3 lines, -20 lines 0 comments Download
M net/socket/ssl_client_socket_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 2 chunks +6 lines, -18 lines 0 comments Download
M net/ssl/channel_id_service.h View 1 2 3 4 5 6 7 8 9 7 chunks +33 lines, -54 lines 0 comments Download
M net/ssl/channel_id_service.cc View 1 2 3 4 5 6 7 8 9 10 25 chunks +90 lines, -176 lines 0 comments Download
M net/ssl/channel_id_service_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 22 chunks +136 lines, -278 lines 0 comments Download
M net/ssl/channel_id_store.h View 1 2 3 4 5 6 7 8 3 chunks +30 lines, -47 lines 0 comments Download
M net/ssl/channel_id_store.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2 chunks +24 lines, -11 lines 0 comments Download
M net/ssl/default_channel_id_store.h View 1 2 3 4 5 6 7 8 4 chunks +10 lines, -19 lines 0 comments Download
M net/ssl/default_channel_id_store.cc View 1 2 3 4 5 6 9 chunks +25 lines, -63 lines 0 comments Download
M net/ssl/default_channel_id_store_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 14 chunks +135 lines, -232 lines 0 comments Download
A net/test/channel_id_test_util.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 chunk +25 lines, -0 lines 0 comments Download
A net/test/channel_id_test_util.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 chunk +25 lines, -0 lines 0 comments Download

Messages

Total messages: 65 (15 generated)
nharper
5 years, 8 months ago (2015-04-09 22:22:19 UTC) #2
Ryan Sleevi
Quick scan for issues; I'll leave Matt to do the major review. https://codereview.chromium.org/1076063002/diff/1/net/extras/sqlite/sqlite_channel_id_store.cc File net/extras/sqlite/sqlite_channel_id_store.cc ...
5 years, 8 months ago (2015-04-09 22:40:10 UTC) #4
nharper
https://codereview.chromium.org/1076063002/diff/1/net/extras/sqlite/sqlite_channel_id_store.cc File net/extras/sqlite/sqlite_channel_id_store.cc (right): https://codereview.chromium.org/1076063002/diff/1/net/extras/sqlite/sqlite_channel_id_store.cc#newcode55 net/extras/sqlite/sqlite_channel_id_store.cc:55: */ On 2015/04/09 22:40:09, Ryan Sleevi wrote: > This ...
5 years, 8 months ago (2015-04-10 00:32:09 UTC) #5
Ryan Sleevi
https://codereview.chromium.org/1076063002/diff/1/net/ssl/channel_id_service.cc File net/ssl/channel_id_service.cc (right): https://codereview.chromium.org/1076063002/diff/1/net/ssl/channel_id_service.cc#newcode123 net/ssl/channel_id_service.cc:123: int CreateECPrivateKeyFromSerializedKey( On 2015/04/10 00:32:09, nharper wrote: > On ...
5 years, 8 months ago (2015-04-10 00:42:14 UTC) #6
mattm
https://codereview.chromium.org/1076063002/diff/1/net/extras/sqlite/sqlite_channel_id_store.cc File net/extras/sqlite/sqlite_channel_id_store.cc (right): https://codereview.chromium.org/1076063002/diff/1/net/extras/sqlite/sqlite_channel_id_store.cc#newcode34 net/extras/sqlite/sqlite_channel_id_store.cc:34: const int kCompatibleVersionNumber = 1; Should be 5 also? ...
5 years, 8 months ago (2015-04-10 01:00:28 UTC) #7
Ryan Sleevi
A lot more comments. The biggest overall comment is why does ChannelIDStore need to know ...
5 years, 8 months ago (2015-04-15 22:50:03 UTC) #8
mattm
https://codereview.chromium.org/1076063002/diff/20001/net/extras/sqlite/sqlite_channel_id_store_unittest.cc File net/extras/sqlite/sqlite_channel_id_store_unittest.cc (right): https://codereview.chromium.org/1076063002/diff/20001/net/extras/sqlite/sqlite_channel_id_store_unittest.cc#newcode468 net/extras/sqlite/sqlite_channel_id_store_unittest.cc:468: add_smt.BindInt64(4, 1000); On 2015/04/15 22:50:02, Ryan Sleevi wrote: > ...
5 years, 8 months ago (2015-04-15 23:11:46 UTC) #9
nharper
https://codereview.chromium.org/1076063002/diff/1/net/extras/sqlite/sqlite_channel_id_store.cc File net/extras/sqlite/sqlite_channel_id_store.cc (right): https://codereview.chromium.org/1076063002/diff/1/net/extras/sqlite/sqlite_channel_id_store.cc#newcode34 net/extras/sqlite/sqlite_channel_id_store.cc:34: const int kCompatibleVersionNumber = 1; On 2015/04/10 01:00:27, mattm ...
5 years, 8 months ago (2015-04-25 02:59:20 UTC) #10
mattm
https://codereview.chromium.org/1076063002/diff/1/net/extras/sqlite/sqlite_channel_id_store.cc File net/extras/sqlite/sqlite_channel_id_store.cc (right): https://codereview.chromium.org/1076063002/diff/1/net/extras/sqlite/sqlite_channel_id_store.cc#newcode34 net/extras/sqlite/sqlite_channel_id_store.cc:34: const int kCompatibleVersionNumber = 1; On 2015/04/25 02:59:18, nharper ...
5 years, 8 months ago (2015-04-27 20:55:53 UTC) #11
nharper
https://codereview.chromium.org/1076063002/diff/1/net/extras/sqlite/sqlite_channel_id_store.cc File net/extras/sqlite/sqlite_channel_id_store.cc (right): https://codereview.chromium.org/1076063002/diff/1/net/extras/sqlite/sqlite_channel_id_store.cc#newcode34 net/extras/sqlite/sqlite_channel_id_store.cc:34: const int kCompatibleVersionNumber = 1; On 2015/04/27 20:55:53, mattm ...
5 years, 7 months ago (2015-04-29 22:07:15 UTC) #12
mattm
https://codereview.chromium.org/1076063002/diff/60001/net/cert/x509_util_nss.cc File net/cert/x509_util_nss.cc (right): https://codereview.chromium.org/1076063002/diff/60001/net/cert/x509_util_nss.cc#newcode198 net/cert/x509_util_nss.cc:198: void ParsePrincipal(CERTName* name, CertPrincipal* principal) { Looks like a ...
5 years, 7 months ago (2015-04-30 00:30:11 UTC) #13
nharper
There are still some larger design questions that need to be addressed/agreed upon: - Is ...
5 years, 7 months ago (2015-04-30 20:31:56 UTC) #14
davidben
On 2015/04/30 20:31:56, nharper wrote: > There are still some larger design questions that need ...
5 years, 7 months ago (2015-04-30 20:45:14 UTC) #15
nharper
On 2015/04/30 20:45:14, David Benjamin wrote: > On 2015/04/30 20:31:56, nharper wrote: > > There ...
5 years, 7 months ago (2015-04-30 21:19:11 UTC) #16
nharper
Refactored handling crypto::ECPrivateKeys. This should address the second and third points in my previous comment.
5 years, 7 months ago (2015-05-08 03:43:53 UTC) #17
Ryan Sleevi
Mostly LG! https://codereview.chromium.org/1076063002/diff/140001/net/extras/sqlite/sqlite_channel_id_store.cc File net/extras/sqlite/sqlite_channel_id_store.cc (right): https://codereview.chromium.org/1076063002/diff/140001/net/extras/sqlite/sqlite_channel_id_store.cc#newcode299 net/extras/sqlite/sqlite_channel_id_store.cc:299: continue; Should this be on line 293, ...
5 years, 7 months ago (2015-05-08 23:43:14 UTC) #18
mattm
https://codereview.chromium.org/1076063002/diff/120001/net/extras/sqlite/sqlite_channel_id_store.cc File net/extras/sqlite/sqlite_channel_id_store.cc (right): https://codereview.chromium.org/1076063002/diff/120001/net/extras/sqlite/sqlite_channel_id_store.cc#newcode228 net/extras/sqlite/sqlite_channel_id_store.cc:228: base::Time::FromInternalValue(smt.ColumnInt64(3)), key.release())); key is leaked https://codereview.chromium.org/1076063002/diff/120001/net/extras/sqlite/sqlite_channel_id_store_unittest.cc File net/extras/sqlite/sqlite_channel_id_store_unittest.cc (right): ...
5 years, 7 months ago (2015-05-09 00:01:01 UTC) #19
nharper
https://codereview.chromium.org/1076063002/diff/120001/net/extras/sqlite/sqlite_channel_id_store.cc File net/extras/sqlite/sqlite_channel_id_store.cc (right): https://codereview.chromium.org/1076063002/diff/120001/net/extras/sqlite/sqlite_channel_id_store.cc#newcode228 net/extras/sqlite/sqlite_channel_id_store.cc:228: base::Time::FromInternalValue(smt.ColumnInt64(3)), key.release())); On 2015/05/09 00:01:00, mattm wrote: > key ...
5 years, 7 months ago (2015-05-11 21:26:44 UTC) #20
Ryan Sleevi
LGTM. Will leave Matt to take a final pass. https://codereview.chromium.org/1076063002/diff/180001/net/ssl/channel_id_service.cc File net/ssl/channel_id_service.cc (right): https://codereview.chromium.org/1076063002/diff/180001/net/ssl/channel_id_service.cc#newcode155 net/ssl/channel_id_service.cc:155: ...
5 years, 7 months ago (2015-05-12 01:11:37 UTC) #21
mattm
https://codereview.chromium.org/1076063002/diff/180001/net/ssl/default_channel_id_store_unittest.cc File net/ssl/default_channel_id_store_unittest.cc (right): https://codereview.chromium.org/1076063002/diff/180001/net/ssl/default_channel_id_store_unittest.cc#newcode129 net/ssl/default_channel_id_store_unittest.cc:129: scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))); nit: there are a number of places make_scoped_ptr ...
5 years, 7 months ago (2015-05-12 07:47:39 UTC) #22
nharper
https://codereview.chromium.org/1076063002/diff/180001/net/ssl/channel_id_service.cc File net/ssl/channel_id_service.cc (right): https://codereview.chromium.org/1076063002/diff/180001/net/ssl/channel_id_service.cc#newcode155 net/ssl/channel_id_service.cc:155: key_->reset(key.release()); On 2015/05/12 01:11:37, Ryan Sleevi wrote: > key_ ...
5 years, 7 months ago (2015-05-12 18:57:27 UTC) #23
mattm
lgtm
5 years, 7 months ago (2015-05-12 20:04:28 UTC) #24
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1076063002/200001
5 years, 7 months ago (2015-05-12 20:07:27 UTC) #27
commit-bot: I haz the power
Try jobs failed on following builders: chromium_presubmit on tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/chromium_presubmit/builds/63099)
5 years, 7 months ago (2015-05-12 20:17:16 UTC) #29
nharper
+kalman for chrome/browser/extensions/api/messaging/message_property_provider.cc
5 years, 7 months ago (2015-05-12 20:23:50 UTC) #32
not at google - send to devlin
lgtm, +juanlang as FYI since he wrote the code.
5 years, 7 months ago (2015-05-12 20:59:52 UTC) #34
nharper
Add missing parts of patch sets 14 and 15; fix an msvc compiler error
5 years, 7 months ago (2015-05-13 23:39:00 UTC) #35
nharper
testing -- ignore
5 years, 7 months ago (2015-05-15 21:03:14 UTC) #36
nharper
try using ternary operator
5 years, 7 months ago (2015-05-15 21:05:54 UTC) #37
nharper
testing - ignore
5 years, 7 months ago (2015-05-15 21:37:59 UTC) #38
nharper
Check that key is not null before copying it
5 years, 7 months ago (2015-05-15 22:26:16 UTC) #39
nharper
rebase
5 years, 7 months ago (2015-05-18 20:55:34 UTC) #43
nharper
Fix mixplaced close paren
5 years, 7 months ago (2015-05-18 20:57:00 UTC) #44
nharper
ptal. The largest change is creating net/test/channel_id_test_util.cc|h to hold helper methods for the unittests instead ...
5 years, 7 months ago (2015-05-18 22:32:40 UTC) #46
Ryan Sleevi
https://codereview.chromium.org/1076063002/diff/410001/net/test/channel_id_test_util.h File net/test/channel_id_test_util.h (right): https://codereview.chromium.org/1076063002/diff/410001/net/test/channel_id_test_util.h#newcode17 net/test/channel_id_test_util.h:17: void ExpectKeysNotEqual(crypto::ECPrivateKey* key1, crypto::ECPrivateKey* key2); 1) I think if ...
5 years, 7 months ago (2015-05-18 23:54:35 UTC) #47
nharper
https://codereview.chromium.org/1076063002/diff/410001/net/test/channel_id_test_util.h File net/test/channel_id_test_util.h (right): https://codereview.chromium.org/1076063002/diff/410001/net/test/channel_id_test_util.h#newcode17 net/test/channel_id_test_util.h:17: void ExpectKeysNotEqual(crypto::ECPrivateKey* key1, crypto::ECPrivateKey* key2); On 2015/05/18 23:54:35, Ryan ...
5 years, 7 months ago (2015-05-19 07:18:50 UTC) #48
Nikita (slow)
On 2015/05/18 22:32:40, nharper wrote: > Also adding markusheintz for chrome/browser/browsing_data and nkostylev for > ...
5 years, 7 months ago (2015-05-19 12:02:23 UTC) #49
mattm
https://codereview.chromium.org/1076063002/diff/430001/net/test/channel_id_test_util.cc File net/test/channel_id_test_util.cc (right): https://codereview.chromium.org/1076063002/diff/430001/net/test/channel_id_test_util.cc#newcode17 net/test/channel_id_test_util.cc:17: return ::testing::AssertionFailure() << "key1 is null"; Doesn't this have ...
5 years, 7 months ago (2015-05-20 01:43:49 UTC) #50
nharper
https://codereview.chromium.org/1076063002/diff/430001/net/test/channel_id_test_util.cc File net/test/channel_id_test_util.cc (right): https://codereview.chromium.org/1076063002/diff/430001/net/test/channel_id_test_util.cc#newcode17 net/test/channel_id_test_util.cc:17: return ::testing::AssertionFailure() << "key1 is null"; On 2015/05/20 01:43:49, ...
5 years, 7 months ago (2015-05-20 18:54:49 UTC) #51
mattm
https://codereview.chromium.org/1076063002/diff/430001/net/test/channel_id_test_util.cc File net/test/channel_id_test_util.cc (right): https://codereview.chromium.org/1076063002/diff/430001/net/test/channel_id_test_util.cc#newcode17 net/test/channel_id_test_util.cc:17: return ::testing::AssertionFailure() << "key1 is null"; On 2015/05/20 18:54:49, ...
5 years, 7 months ago (2015-05-22 20:45:47 UTC) #52
nharper
markusheintz: Can you look at the files in chrome/browser/browsing_data for OWNERS approval (or suggest someone ...
5 years, 7 months ago (2015-05-26 15:02:42 UTC) #53
nharper
+mkwst for OWNERS approval on chrome/browser/browsing_data
5 years, 7 months ago (2015-05-27 17:13:16 UTC) #55
Mike West
chrome/browser/browsing_data LGTM.
5 years, 6 months ago (2015-05-28 06:16:53 UTC) #56
markusheintz_
On 2015/05/28 06:16:53, Mike West wrote: > chrome/browser/browsing_data LGTM. LGTM
5 years, 6 months ago (2015-05-29 15:15:09 UTC) #57
markusheintz_
On 2015/05/28 06:16:53, Mike West wrote: > chrome/browser/browsing_data LGTM. LGTM
5 years, 6 months ago (2015-05-29 15:15:14 UTC) #58
markusheintz_
On 2015/05/28 06:16:53, Mike West wrote: > chrome/browser/browsing_data LGTM. LGTM
5 years, 6 months ago (2015-05-29 15:15:19 UTC) #59
Mike West
On 2015/05/29 at 15:15:19, markusheintz wrote: > On 2015/05/28 06:16:53, Mike West wrote: > > ...
5 years, 6 months ago (2015-05-29 15:23:47 UTC) #60
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1076063002/450001
5 years, 6 months ago (2015-06-01 17:31:03 UTC) #63
commit-bot: I haz the power
Committed patchset #21 (id:450001)
5 years, 6 months ago (2015-06-01 20:29:42 UTC) #64
commit-bot: I haz the power
5 years, 6 months ago (2015-06-01 20:30:26 UTC) #65
Message was sent while issue was closed.
Patchset 21 (id:??) landed as
https://crrev.com/2e171cf4d960a6c723a529b2a4cbceb075bcd306
Cr-Commit-Position: refs/heads/master@{#332260}

Powered by Google App Engine
This is Rietveld 408576698