Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "content/browser/renderer_host/routing_id_issuer.h" | |
| 6 | |
| 7 namespace content { | |
| 8 | |
| 9 namespace { | |
| 10 | |
| 11 const int kManglerBits = 3; | |
| 12 const int kIDBits = 31 - kManglerBits; | |
| 13 const int kManglerWrap = 1 << kManglerBits; | |
| 14 const int kManglerMask = kManglerWrap - 1; | |
| 15 const int kIDWrap = 1 << kIDBits; | |
| 16 const int kIDMask = kIDWrap - 1; | |
| 17 | |
| 18 base::StaticAtomicSequenceNumber g_manglerSequence; | |
|
nasko
2014/10/13 22:40:02
nit: let's make this one static, as it isn't used
Hajime Morrita
2014/10/13 23:39:17
Done.
| |
| 19 int g_disablingIDManglingCount = 0; | |
| 20 | |
| 21 int GetNextMangler() { | |
| 22 return g_manglerSequence.GetNext() % kManglerWrap; | |
| 23 } | |
| 24 | |
| 25 } // namespace | |
| 26 | |
| 27 scoped_ptr<RoutingIDIssuer> RoutingIDIssuer::Create() { | |
| 28 if (0 < g_disablingIDManglingCount) | |
| 29 return make_scoped_ptr(new RoutingIDIssuer(0)); | |
| 30 | |
| 31 DCHECK(0 == g_disablingIDManglingCount); | |
| 32 return make_scoped_ptr(new RoutingIDIssuer(GetNextMangler())); | |
| 33 } | |
| 34 | |
| 35 scoped_ptr<RoutingIDIssuer> RoutingIDIssuer::CreateWithMangler(int mangler) { | |
| 36 return make_scoped_ptr(new RoutingIDIssuer(mangler)); | |
| 37 } | |
| 38 | |
| 39 RoutingIDIssuer::RoutingIDIssuer(int mangler) : mangler_(mangler) { | |
| 40 DCHECK(0 <= mangler_ && mangler_ < kManglerWrap) << mangler_ | |
| 41 << ">=" << kManglerWrap; | |
| 42 } | |
| 43 | |
| 44 int RoutingIDIssuer::IssueNext() { | |
| 45 return (mangler_ << kIDBits) | ((next_.GetNext() + 1) & kIDMask); | |
| 46 } | |
| 47 | |
| 48 bool RoutingIDIssuer::IsProbablyValid(int issued_id) const { | |
| 49 return mangler_ == ((issued_id >> kIDBits) & kManglerMask); | |
| 50 } | |
| 51 | |
| 52 void RoutingIDIssuer::DisableIDMangling() { | |
| 53 g_disablingIDManglingCount++; | |
| 54 } | |
| 55 | |
| 56 void RoutingIDIssuer::EnableIDMangling() { | |
| 57 g_disablingIDManglingCount--; | |
| 58 DCHECK(0 <= g_disablingIDManglingCount); | |
| 59 } | |
| 60 | |
| 61 } // namespace content | |
| OLD | NEW |