blob: a03d7f2a9f163828cb4e660041fd8921b153a3fa [file] [log] [blame]
// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#if defined(ENABLE_TEST_RUNNER)
#include "cobalt/dom/test_runner.h"
#include "base/message_loop/message_loop.h"
#include "cobalt/base/polymorphic_downcast.h"
#include "cobalt/script/javascript_engine.h"
namespace cobalt {
namespace dom {
TestRunner::TestRunner()
: should_wait_(false), clock_(new base::ManualAdvanceClock()) {}
void TestRunner::NotifyDone() {
if (should_wait_) {
should_wait_ = false;
if (!trigger_layout_callback_.is_null()) {
trigger_layout_callback_.Run();
}
// Reset |should_wait_| to prevent a second layout if the document onLoad
// event occurs after the layout trigger.
should_wait_ = true;
}
}
void TestRunner::WaitUntilDone() { should_wait_ = true; }
void TestRunner::DoNonMeasuredLayout() {
if (should_wait_ && !trigger_layout_callback_.is_null()) {
trigger_layout_callback_.Run();
}
}
void TestRunner::AdvanceClockByMs(uint64 amount) {
clock_->Advance(base::TimeDelta::FromMilliseconds(amount));
}
void TestRunner::CollectGarbageAndThenDo(
script::EnvironmentSettings* settings,
const TestRunnerCallbackArg& callback_arg) {
DCHECK(settings);
TestRunnerCallbackArg::Reference reference(this, callback_arg);
DOMSettings* dom_settings =
base::polymorphic_downcast<dom::DOMSettings*>(settings);
dom_settings->javascript_engine()->CollectGarbage();
reference.value().Run();
}
scoped_refptr<base::BasicClock> TestRunner::GetClock() { return clock_; }
} // namespace dom
} // namespace cobalt
#endif // ENABLE_TEST_RUNNER