diff --git a/cc/input/scroll_elasticity_helper.cc b/cc/input/scroll_elasticity_helper.cc index 413d64f..8670b830 100644 --- a/cc/input/scroll_elasticity_helper.cc +++ b/cc/input/scroll_elasticity_helper.cc
@@ -7,6 +7,7 @@ #include "cc/layers/layer_impl.h" #include "cc/trees/layer_tree_host_impl.h" #include "cc/trees/layer_tree_impl.h" +#include "cc/trees/scroll_node.h" namespace cc { @@ -36,11 +37,11 @@ } bool ScrollElasticityHelperImpl::IsUserScrollable() const { - LayerImpl* layer = layer_tree_host_impl_->OuterViewportScrollLayer(); - if (!layer) + const auto* scroll_node = layer_tree_host_impl_->OuterViewportScrollNode(); + if (!scroll_node) return false; - return layer->user_scrollable_horizontal() || - layer->user_scrollable_vertical(); + return scroll_node->user_scrollable_horizontal || + scroll_node->user_scrollable_vertical; } gfx::Vector2dF ScrollElasticityHelperImpl::StretchAmount() const {
diff --git a/cc/input/scrollbar_animation_controller_unittest.cc b/cc/input/scrollbar_animation_controller_unittest.cc index b9ddce2..a25ea11 100644 --- a/cc/input/scrollbar_animation_controller_unittest.cc +++ b/cc/input/scrollbar_animation_controller_unittest.cc
@@ -1402,7 +1402,8 @@ LayerImpl* scroll_layer = host_impl_.active_tree()->LayerById(1); ASSERT_TRUE(scroll_layer); - scroll_layer->set_user_scrollable_horizontal(false); + scroll_layer->test_properties()->user_scrollable_horizontal = false; + host_impl_.active_tree()->BuildLayerListAndPropertyTreesForTesting(); scrollbar_controller_->DidScrollBegin(); @@ -1417,7 +1418,8 @@ LayerImpl* scroll_layer = host_impl_.active_tree()->LayerById(1); ASSERT_TRUE(scroll_layer); - scroll_layer->set_user_scrollable_vertical(false); + scroll_layer->test_properties()->user_scrollable_vertical = false; + host_impl_.active_tree()->BuildLayerListAndPropertyTreesForTesting(); scrollbar_controller_->DidScrollBegin(); @@ -1433,7 +1435,8 @@ LayerImpl* scroll_layer = host_impl_.active_tree()->LayerById(1); ASSERT_TRUE(scroll_layer); - scroll_layer->set_user_scrollable_vertical(false); + scroll_layer->test_properties()->user_scrollable_vertical = false; + host_impl_.active_tree()->BuildLayerListAndPropertyTreesForTesting(); scrollbar_controller_->DidScrollBegin(); @@ -1449,7 +1452,8 @@ LayerImpl* scroll_layer = host_impl_.active_tree()->LayerById(1); ASSERT_TRUE(scroll_layer); - scroll_layer->set_user_scrollable_horizontal(false); + scroll_layer->test_properties()->user_scrollable_horizontal = false; + host_impl_.active_tree()->BuildLayerListAndPropertyTreesForTesting(); scrollbar_controller_->DidScrollBegin();
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc index d3100f3..f4ff01d 100644 --- a/cc/layers/layer.cc +++ b/cc/layers/layer.cc
@@ -1171,8 +1171,6 @@ layer->SetShouldCheckBackfaceVisibility(should_check_backface_visibility_); layer->SetScrollClipLayer(inputs_.scroll_clip_layer_id); - layer->set_user_scrollable_horizontal(inputs_.user_scrollable_horizontal); - layer->set_user_scrollable_vertical(inputs_.user_scrollable_vertical); layer->SetMutableProperties(inputs_.mutable_properties); // The property trees must be safe to access because they will be used below
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc index be6cf82..1b20f0e 100644 --- a/cc/layers/layer_impl.cc +++ b/cc/layers/layer_impl.cc
@@ -55,8 +55,6 @@ scroll_clip_layer_id_(Layer::INVALID_ID), main_thread_scrolling_reasons_( MainThreadScrollingReason::kNotScrollingOnMain), - user_scrollable_horizontal_(true), - user_scrollable_vertical_(true), should_flatten_transform_from_property_tree_(false), layer_property_changed_(false), may_contain_video_(false), @@ -290,19 +288,6 @@ return scroll_clip_layer_id_ != Layer::INVALID_ID; } -void LayerImpl::set_user_scrollable_horizontal(bool scrollable) { - user_scrollable_horizontal_ = scrollable; -} - -void LayerImpl::set_user_scrollable_vertical(bool scrollable) { - user_scrollable_vertical_ = scrollable; -} - -bool LayerImpl::user_scrollable(ScrollbarOrientation orientation) const { - return (orientation == HORIZONTAL) ? user_scrollable_horizontal_ - : user_scrollable_vertical_; -} - std::unique_ptr<LayerImpl> LayerImpl::CreateLayerImpl( LayerTreeImpl* tree_impl) { return LayerImpl::Create(tree_impl, layer_id_); @@ -321,8 +306,6 @@ layer->offset_to_transform_parent_ = offset_to_transform_parent_; layer->main_thread_scrolling_reasons_ = main_thread_scrolling_reasons_; - layer->user_scrollable_horizontal_ = user_scrollable_horizontal_; - layer->user_scrollable_vertical_ = user_scrollable_vertical_; layer->should_flatten_transform_from_property_tree_ = should_flatten_transform_from_property_tree_; layer->masks_to_bounds_ = masks_to_bounds_;
diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h index cd791ca..5fa037d0 100644 --- a/cc/layers/layer_impl.h +++ b/cc/layers/layer_impl.h
@@ -307,15 +307,6 @@ LayerImpl* scroll_clip_layer() const; bool scrollable() const; - void set_user_scrollable_horizontal(bool scrollable); - bool user_scrollable_horizontal() const { - return user_scrollable_horizontal_; - } - void set_user_scrollable_vertical(bool scrollable); - bool user_scrollable_vertical() const { return user_scrollable_vertical_; } - - bool user_scrollable(ScrollbarOrientation orientation) const; - void set_main_thread_scrolling_reasons( uint32_t main_thread_scrolling_reasons) { main_thread_scrolling_reasons_ = main_thread_scrolling_reasons; @@ -493,8 +484,6 @@ gfx::Vector2dF offset_to_transform_parent_; uint32_t main_thread_scrolling_reasons_; - bool user_scrollable_horizontal_ : 1; - bool user_scrollable_vertical_ : 1; bool should_flatten_transform_from_property_tree_ : 1; // Tracks if drawing-related properties have changed since last redraw.
diff --git a/cc/layers/layer_impl_test_properties.h b/cc/layers/layer_impl_test_properties.h index ee2917e2..fe4c1f8 100644 --- a/cc/layers/layer_impl_test_properties.h +++ b/cc/layers/layer_impl_test_properties.h
@@ -56,6 +56,8 @@ LayerImplList children; LayerImpl* mask_layer; LayerImpl* parent; + bool user_scrollable_horizontal = true; + bool user_scrollable_vertical = true; }; } // namespace cc
diff --git a/cc/layers/layer_impl_unittest.cc b/cc/layers/layer_impl_unittest.cc index b12d3a3..e857606 100644 --- a/cc/layers/layer_impl_unittest.cc +++ b/cc/layers/layer_impl_unittest.cc
@@ -623,7 +623,7 @@ gfx::ScrollOffset scroll_offset(10, 5); gfx::Vector2dF scroll_delta(20.5f, 8.5f); - layer()->set_user_scrollable_vertical(false); + layer()->test_properties()->user_scrollable_vertical = false; layer()->layer_tree_impl()->property_trees()->needs_rebuild = true; layer()->layer_tree_impl()->BuildLayerListAndPropertyTreesForTesting(); scroll_tree(layer())->UpdateScrollOffsetBaseForTesting(layer()->id(),
diff --git a/cc/layers/scrollbar_layer_impl_base.cc b/cc/layers/scrollbar_layer_impl_base.cc index 7c51ea9e..f9b342a 100644 --- a/cc/layers/scrollbar_layer_impl_base.cc +++ b/cc/layers/scrollbar_layer_impl_base.cc
@@ -7,6 +7,7 @@ #include <algorithm> #include "cc/trees/effect_node.h" #include "cc/trees/layer_tree_impl.h" +#include "cc/trees/scroll_node.h" #include "ui/gfx/geometry/rect_conversions.h" namespace cc { @@ -80,12 +81,18 @@ } bool ScrollbarLayerImplBase::CanScrollOrientation() const { - // TODO(pdr): Refactor this to not depend on layers by using the associated - // scroll node's user_scrollable values. - LayerImpl* scroll_layer = - layer_tree_impl()->LayerByElementId(scroll_element_id_); - if (!scroll_layer) - return false; + PropertyTrees* property_trees = layer_tree_impl()->property_trees(); + const auto* scroll_node = + property_trees->scroll_tree.FindNodeFromElementId(scroll_element_id_); + DCHECK(scroll_node); + + if (orientation() == ScrollbarOrientation::HORIZONTAL) { + if (!scroll_node->user_scrollable_horizontal) + return false; + } else { + if (!scroll_node->user_scrollable_vertical) + return false; + } // Ensure the clip_layer_length and scroll_layer_length values are up-to-date. // TODO(pdr): Instead of using the clip and scroll layer lengths which require @@ -93,10 +100,9 @@ // as in LayerTreeHostImpl::TryScroll). layer_tree_impl()->UpdateScrollbarGeometries(); - return scroll_layer->user_scrollable(orientation()) && - // Ensure clip_layer_length is smaller than scroll_layer_length, not - // including small deltas due to floating point error. - !MathUtil::IsFloatNearlyTheSame(clip_layer_length(), + // Ensure clip_layer_length is smaller than scroll_layer_length, not including + // small deltas due to floating point error. + return !MathUtil::IsFloatNearlyTheSame(clip_layer_length(), scroll_layer_length()) && clip_layer_length() < scroll_layer_length(); }
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index a0b3611..fe1084b 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -1622,11 +1622,11 @@ active_tree_->GetViewportSelection(&metadata.selection); - if (OuterViewportScrollLayer()) { + if (const auto* outer_viewport_scroll_node = OuterViewportScrollNode()) { metadata.root_overflow_x_hidden = - !OuterViewportScrollLayer()->user_scrollable_horizontal(); + !outer_viewport_scroll_node->user_scrollable_horizontal; metadata.root_overflow_y_hidden = - !OuterViewportScrollLayer()->user_scrollable_vertical(); + !outer_viewport_scroll_node->user_scrollable_vertical; } if (GetDrawMode() == DRAW_MODE_RESOURCELESS_SOFTWARE) { @@ -1638,13 +1638,14 @@ metadata.referenced_surfaces.push_back(surface_id); } - if (!InnerViewportScrollLayer()) + const auto* inner_viewport_scroll_node = InnerViewportScrollNode(); + if (!inner_viewport_scroll_node) return metadata; metadata.root_overflow_x_hidden |= - !InnerViewportScrollLayer()->user_scrollable_horizontal(); + !inner_viewport_scroll_node->user_scrollable_horizontal; metadata.root_overflow_y_hidden |= - !InnerViewportScrollLayer()->user_scrollable_vertical(); + !inner_viewport_scroll_node->user_scrollable_vertical; // TODO(miletus) : Change the metadata to hold ScrollOffset. metadata.root_scroll_offset = @@ -2012,11 +2013,21 @@ return active_tree_->InnerViewportScrollLayer(); } +ScrollNode* LayerTreeHostImpl::InnerViewportScrollNode() const { + const auto* inner_viewport_scroll_layer = InnerViewportScrollLayer(); + if (!inner_viewport_scroll_layer) + return nullptr; + ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree; + return scroll_tree.Node(inner_viewport_scroll_layer->scroll_tree_index()); +} + LayerImpl* LayerTreeHostImpl::OuterViewportScrollLayer() const { return active_tree_->OuterViewportScrollLayer(); } ScrollNode* LayerTreeHostImpl::OuterViewportScrollNode() const { + // TODO(pdr): Refactor this to work like InnerViewportScrollNode and access + // OuterViewportScrollLayer instead of MainScrollLayer. if (!viewport()->MainScrollLayer()) return nullptr; ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree; @@ -3374,10 +3385,10 @@ scroll_state->delta_y()); // When inner viewport is unscrollable, disable overscrolls. - if (InnerViewportScrollLayer()) { - if (!InnerViewportScrollLayer()->user_scrollable_horizontal()) + if (const auto* inner_viewport_scroll_node = InnerViewportScrollNode()) { + if (!inner_viewport_scroll_node->user_scrollable_horizontal) unused_root_delta.set_x(0); - if (!InnerViewportScrollLayer()->user_scrollable_vertical()) + if (!inner_viewport_scroll_node->user_scrollable_vertical) unused_root_delta.set_y(0); }
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index 3036110..eaad972 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h
@@ -437,6 +437,7 @@ // Shortcuts to layers/nodes on the active tree. LayerImpl* InnerViewportScrollLayer() const; + ScrollNode* InnerViewportScrollNode() const; LayerImpl* OuterViewportScrollLayer() const; ScrollNode* OuterViewportScrollNode() const; ScrollNode* CurrentlyScrollingNode();
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index b207e5b..6056657 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -1446,7 +1446,7 @@ EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->CurrentScrollOffset()); EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), overflow->CurrentScrollOffset()); - overflow->set_user_scrollable_horizontal(false); + overflow->test_properties()->user_scrollable_horizontal = false; host_impl_->active_tree()->BuildPropertyTreesForTesting(); DrawFrame(); @@ -1464,7 +1464,7 @@ EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), scroll_layer->CurrentScrollOffset()); EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset()); - overflow->set_user_scrollable_vertical(false); + overflow->test_properties()->user_scrollable_vertical = false; host_impl_->active_tree()->BuildPropertyTreesForTesting(); DrawFrame(); @@ -3334,6 +3334,7 @@ animation_task_ = base::Closure(); child_clip_ptr->SetBounds(gfx::Size(200, 200)); child_ptr->set_needs_show_scrollbars(true); + host_impl_->active_tree()->BuildPropertyTreesForTesting(); host_impl_->active_tree()->HandleScrollbarShowRequestsFromMain(); EXPECT_FALSE(animation_task_.Equals(base::Closure())); animation_task_ = base::Closure(); @@ -3553,7 +3554,9 @@ { host_impl_->active_tree() ->OuterViewportScrollLayer() - ->set_user_scrollable_horizontal(false); + ->test_properties() + ->user_scrollable_horizontal = false; + host_impl_->active_tree()->BuildPropertyTreesForTesting(); CompositorFrameMetadata metadata = host_impl_->MakeCompositorFrameMetadata(); EXPECT_TRUE(metadata.root_overflow_x_hidden); @@ -3561,7 +3564,9 @@ host_impl_->active_tree() ->OuterViewportScrollLayer() - ->set_user_scrollable_vertical(false); + ->test_properties() + ->user_scrollable_vertical = false; + host_impl_->active_tree()->BuildPropertyTreesForTesting(); metadata = host_impl_->MakeCompositorFrameMetadata(); EXPECT_TRUE(metadata.root_overflow_x_hidden); EXPECT_TRUE(metadata.root_overflow_y_hidden); @@ -3571,10 +3576,13 @@ { host_impl_->active_tree() ->OuterViewportScrollLayer() - ->set_user_scrollable_horizontal(true); + ->test_properties() + ->user_scrollable_horizontal = true; host_impl_->active_tree() ->OuterViewportScrollLayer() - ->set_user_scrollable_vertical(true); + ->test_properties() + ->user_scrollable_vertical = true; + host_impl_->active_tree()->BuildPropertyTreesForTesting(); CompositorFrameMetadata metadata = host_impl_->MakeCompositorFrameMetadata(); EXPECT_FALSE(metadata.root_overflow_x_hidden); @@ -3586,7 +3594,9 @@ { host_impl_->active_tree() ->InnerViewportScrollLayer() - ->set_user_scrollable_horizontal(false); + ->test_properties() + ->user_scrollable_horizontal = false; + host_impl_->active_tree()->BuildPropertyTreesForTesting(); CompositorFrameMetadata metadata = host_impl_->MakeCompositorFrameMetadata(); EXPECT_TRUE(metadata.root_overflow_x_hidden); @@ -3594,7 +3604,9 @@ host_impl_->active_tree() ->InnerViewportScrollLayer() - ->set_user_scrollable_vertical(false); + ->test_properties() + ->user_scrollable_vertical = false; + host_impl_->active_tree()->BuildPropertyTreesForTesting(); metadata = host_impl_->MakeCompositorFrameMetadata(); EXPECT_TRUE(metadata.root_overflow_x_hidden); EXPECT_TRUE(metadata.root_overflow_y_hidden); @@ -10353,8 +10365,8 @@ SetupVirtualViewportLayers(content_size, outer_viewport, inner_viewport); // Make inner viewport unscrollable. LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer(); - inner_scroll->set_user_scrollable_horizontal(false); - inner_scroll->set_user_scrollable_vertical(false); + inner_scroll->test_properties()->user_scrollable_horizontal = false; + inner_scroll->test_properties()->user_scrollable_vertical = false; host_impl_->active_tree()->BuildPropertyTreesForTesting(); DrawFrame(); @@ -11357,8 +11369,12 @@ const gfx::Size viewport_size(500, 500); CreateBasicVirtualViewportLayers(viewport_size, content_size); - host_impl_->OuterViewportScrollLayer()->set_user_scrollable_vertical(true); - host_impl_->OuterViewportScrollLayer()->set_user_scrollable_horizontal(false); + host_impl_->OuterViewportScrollLayer() + ->test_properties() + ->user_scrollable_vertical = true; + host_impl_->OuterViewportScrollLayer() + ->test_properties() + ->user_scrollable_horizontal = false; host_impl_->active_tree()->BuildPropertyTreesForTesting(); DrawFrame();
diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc index 52446225..20d087b9 100644 --- a/cc/trees/property_tree_builder.cc +++ b/cc/trees/property_tree_builder.cc
@@ -989,6 +989,22 @@ return should_create_render_surface; } +static inline bool UserScrollableHorizontal(Layer* layer) { + return layer->user_scrollable_horizontal(); +} + +static inline bool UserScrollableHorizontal(LayerImpl* layer) { + return layer->test_properties()->user_scrollable_horizontal; +} + +static inline bool UserScrollableVertical(Layer* layer) { + return layer->user_scrollable_vertical(); +} + +static inline bool UserScrollableVertical(LayerImpl* layer) { + return layer->test_properties()->user_scrollable_vertical; +} + template <typename LayerType> void AddScrollNodeIfNeeded( const DataForRecursion<LayerType>& data_from_ancestor, @@ -1048,8 +1064,8 @@ node.bounds = layer->bounds(); node.offset_to_transform_parent = layer->offset_to_transform_parent(); node.should_flatten = layer->should_flatten_transform_from_property_tree(); - node.user_scrollable_horizontal = layer->user_scrollable_horizontal(); - node.user_scrollable_vertical = layer->user_scrollable_vertical(); + node.user_scrollable_horizontal = UserScrollableHorizontal(layer); + node.user_scrollable_vertical = UserScrollableVertical(layer); node.element_id = layer->element_id(); node.transform_id = data_for_children->transform_tree_parent->transform_tree_index();
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h b/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h index 22f2279..528b556c 100644 --- a/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h +++ b/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h
@@ -99,7 +99,9 @@ new_item->SetOwnerList(this); } - bool operator==(const Derived&) const; + bool operator==(const Derived& other) const { + return values_ == other.values_; + } bool operator!=(const Derived& other) const { return !(*this == other); } bool IsEmpty() const { return !length(); } @@ -142,38 +144,17 @@ private: inline bool CheckIndexBound(size_t, ExceptionState&); - size_t FindItem(ItemPropertyType*); HeapVector<Member<ItemPropertyType>> values_; }; template <typename Derived, typename ItemProperty> -bool SVGListPropertyHelper<Derived, ItemProperty>::operator==( - const Derived& other) const { - if (length() != other.length()) - return false; - - size_t size = length(); - for (size_t i = 0; i < size; ++i) { - if (*at(i) != *other.at(i)) - return false; - } - - return true; -} - -template <typename Derived, typename ItemProperty> void SVGListPropertyHelper<Derived, ItemProperty>::Clear() { - // detach all list items as they are no longer part of this list - typename HeapVector<Member<ItemPropertyType>>::const_iterator it = - values_.begin(); - typename HeapVector<Member<ItemPropertyType>>::const_iterator it_end = - values_.end(); - for (; it != it_end; ++it) { - DCHECK_EQ((*it)->OwnerList(), this); - (*it)->SetOwnerList(nullptr); + // Detach all list items as they are no longer part of this list. + for (auto& value : values_) { + DCHECK_EQ(value->OwnerList(), this); + value->SetOwnerList(nullptr); } - values_.clear(); } @@ -193,10 +174,7 @@ ExceptionState& exception_state) { if (!CheckIndexBound(index, exception_state)) return nullptr; - - DCHECK_LT(index, values_.size()); - DCHECK_EQ(values_.at(index)->OwnerList(), this); - return values_.at(index); + return at(index); } template <typename Derived, typename ItemProperty> @@ -214,7 +192,6 @@ // front of the list. values_.insert(index, new_item); new_item->SetOwnerList(this); - return new_item; } @@ -222,16 +199,13 @@ ItemProperty* SVGListPropertyHelper<Derived, ItemProperty>::RemoveItem( size_t index, ExceptionState& exception_state) { - if (index >= values_.size()) { - exception_state.ThrowDOMException( - kIndexSizeError, ExceptionMessages::IndexExceedsMaximumBound( - "index", index, values_.size())); + if (!CheckIndexBound(index, exception_state)) return nullptr; - } + DCHECK_EQ(values_.at(index)->OwnerList(), this); ItemPropertyType* old_item = values_.at(index); values_.erase(index); - old_item->SetOwnerList(0); + old_item->SetOwnerList(nullptr); return old_item; } @@ -240,7 +214,6 @@ ItemProperty* new_item) { // Append the value and wrapper at the end of the list. Append(new_item); - return new_item; } @@ -255,6 +228,7 @@ if (values_.IsEmpty()) { // 'newItem' already lived in our list, we removed it, and now we're empty, // which means there's nothing to replace. + // TODO(fs): This should not cause us to throw an exception. exception_state.ThrowDOMException( kIndexSizeError, String::Format("Failed to replace the provided item at index %zu.", @@ -265,10 +239,9 @@ // Update the value at the desired position 'index'. Member<ItemPropertyType>& position = values_[index]; DCHECK_EQ(position->OwnerList(), this); - position->SetOwnerList(0); + position->SetOwnerList(nullptr); position = new_item; new_item->SetOwnerList(this); - return new_item; } @@ -282,26 +255,14 @@ "index", index, values_.size())); return false; } - return true; } template <typename Derived, typename ItemProperty> -size_t SVGListPropertyHelper<Derived, ItemProperty>::FindItem( - ItemPropertyType* item) { - return values_.Find(item); -} - -template <typename Derived, typename ItemProperty> void SVGListPropertyHelper<Derived, ItemProperty>::DeepCopy(Derived* from) { Clear(); - typename HeapVector<Member<ItemPropertyType>>::const_iterator it = - from->values_.begin(); - typename HeapVector<Member<ItemPropertyType>>::const_iterator it_end = - from->values_.end(); - for (; it != it_end; ++it) { - Append((*it)->Clone()); - } + for (const auto& from_value : from->values_) + Append(from_value->Clone()); } template <typename Derived, typename ItemProperty> @@ -325,16 +286,12 @@ } else { DeepCopy(to_list); } - return false; } DCHECK(!from_list_size || from_list_size == to_list_size); - if (length() < to_list_size) { - size_t padding_count = to_list_size - length(); - for (size_t i = 0; i < padding_count; ++i) - Append(CreatePaddingItem()); - } + for (size_t i = length(); i < to_list_size; ++i) + Append(CreatePaddingItem()); return true; }