summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/page/named_pages_mapper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/page/named_pages_mapper.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/page/named_pages_mapper.cc43
1 files changed, 43 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/core/page/named_pages_mapper.cc b/chromium/third_party/blink/renderer/core/page/named_pages_mapper.cc
new file mode 100644
index 00000000000..7a000869f81
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/page/named_pages_mapper.cc
@@ -0,0 +1,43 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/core/page/named_pages_mapper.h"
+
+namespace blink {
+
+void NamedPagesMapper::AddNamedPage(const AtomicString& page_name,
+ int page_index) {
+ DCHECK_GE(entries_.size(), 1u);
+
+ // The last entry should have no last page set.
+ DCHECK_EQ(entries_.back().last_page_index, -1);
+
+ if (page_index > 0) {
+ auto prev_it = entries_.rbegin();
+ for (auto it = prev_it + 1; it != entries_.rend(); prev_it = it++) {
+ if (it->last_page_index < page_index)
+ break;
+ }
+
+ entries_.Shrink(entries_.rend() - prev_it);
+
+ // Terminate the previous entry (now that we know its last page index)
+ // before adding the new entry.
+ entries_.back().last_page_index = page_index - 1;
+ } else {
+ DCHECK_EQ(page_index, 0);
+ entries_.Shrink(0);
+ }
+ entries_.emplace_back(page_name);
+}
+
+const AtomicString& NamedPagesMapper::NamedPageAtIndex(int page_index) const {
+ for (const Entry& entry : entries_) {
+ if (page_index <= entry.last_page_index)
+ return entry.page_name;
+ }
+ return entries_.back().page_name;
+}
+
+} // namespace blink