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 11namespace ui { 12namespace test { 13 14TestEventTarget::TestEventTarget() 15 : parent_(NULL), 16 mark_events_as_handled_(false), 17 recorder_(NULL), 18 target_name_("unknown") {} 19TestEventTarget::~TestEventTarget() {} 20 21void 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 31scoped_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 43void TestEventTarget::SetEventTargeter(scoped_ptr<EventTargeter> targeter) { 44 targeter_ = targeter.Pass(); 45} 46 47bool TestEventTarget::DidReceiveEvent(ui::EventType type) const { 48 return received_.count(type) > 0; 49} 50 51void TestEventTarget::ResetReceivedEvents() { 52 received_.clear(); 53} 54 55//////////////////////////////////////////////////////////////////////////////// 56// TestEventTarget, protected 57 58bool TestEventTarget::CanAcceptEvent(const ui::Event& event) { 59 return true; 60} 61 62EventTarget* TestEventTarget::GetParentTarget() { 63 return parent_; 64} 65 66scoped_ptr<EventTargetIterator> TestEventTarget::GetChildIterator() const { 67 return scoped_ptr<EventTargetIterator>( 68 new EventTargetIteratorImpl<TestEventTarget>(children_.get())); 69} 70 71EventTargeter* TestEventTarget::GetEventTargeter() { 72 return targeter_.get(); 73} 74 75void 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 87bool 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