1 // Copyright 2013 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 "ui/events/test/test_event_target.h" 6 7 #include "ui/events/event.h" 8 #include "ui/events/event_target_iterator.h" 9 #include "ui/events/event_targeter.h" 10 11 namespace ui { 12 namespace test { 13 14 TestEventTarget::TestEventTarget() 15 : parent_(NULL), 16 mark_events_as_handled_(false), 17 recorder_(NULL), 18 target_name_("unknown") {} 19 TestEventTarget::~TestEventTarget() {} 20 21 void TestEventTarget::AddChild(scoped_ptr<TestEventTarget> child) { 22 TestEventTarget* child_r = child.get(); 23 if (child->parent()) { 24 AddChild(child->parent()->RemoveChild(child.release())); 25 } else { 26 children_.push_back(child.release()); 27 } 28 child_r->set_parent(this); 29 } 30 31 scoped_ptr<TestEventTarget> TestEventTarget::RemoveChild(TestEventTarget *c) { 32 ScopedVector<TestEventTarget>::iterator iter = std::find(children_.begin(), 33 children_.end(), 34 c); 35 if (iter != children_.end()) { 36 children_.weak_erase(iter); 37 c->set_parent(NULL); 38 return scoped_ptr<TestEventTarget>(c); 39 } 40 return scoped_ptr<TestEventTarget>(); 41 } 42 43 void TestEventTarget::SetEventTargeter(scoped_ptr<EventTargeter> targeter) { 44 targeter_ = targeter.Pass(); 45 } 46 47 bool TestEventTarget::DidReceiveEvent(ui::EventType type) const { 48 return received_.count(type) > 0; 49 } 50 51 void TestEventTarget::ResetReceivedEvents() { 52 received_.clear(); 53 } 54 55 //////////////////////////////////////////////////////////////////////////////// 56 // TestEventTarget, protected 57 58 bool TestEventTarget::CanAcceptEvent(const ui::Event& event) { 59 return true; 60 } 61 62 EventTarget* TestEventTarget::GetParentTarget() { 63 return parent_; 64 } 65 66 scoped_ptr<EventTargetIterator> TestEventTarget::GetChildIterator() const { 67 return scoped_ptr<EventTargetIterator>( 68 new EventTargetIteratorImpl<TestEventTarget>(children_.get())); 69 } 70 71 EventTargeter* TestEventTarget::GetEventTargeter() { 72 return targeter_.get(); 73 } 74 75 void TestEventTarget::OnEvent(Event* event) { 76 if (recorder_) 77 recorder_->push_back(target_name_); 78 received_.insert(event->type()); 79 EventTarget::OnEvent(event); 80 if (!event->handled() && mark_events_as_handled_) 81 event->SetHandled(); 82 } 83 84 //////////////////////////////////////////////////////////////////////////////// 85 // TestEventTarget, private 86 87 bool TestEventTarget::Contains(TestEventTarget* target) const { 88 while (target && target != this) 89 target = target->parent(); 90 return target == this; 91 } 92 93 } // namespace test 94 } // namespace ui 95