blob: 4a99baed4c33a2c9a00856b957560cb8f7d859c0 [file] [log] [blame]
// Copyright 2016 Google Inc. 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.
#ifndef COBALT_WEBDRIVER_SCRIPT_EXECUTOR_RESULT_H_
#define COBALT_WEBDRIVER_SCRIPT_EXECUTOR_RESULT_H_
#if defined(ENABLE_WEBDRIVER)
#include <string>
#include "base/threading/thread_checker.h"
#include "cobalt/script/wrappable.h"
namespace cobalt {
namespace webdriver {
// An instance of the ScriptExecutorResult is passed to the webdriver script
// execution harness to collect the results of running a script via webdriver.
// The results are forwarded to a ResultHandler instance.
class ScriptExecutorResult : public script::Wrappable {
public:
// The ScriptExecutorResult class must only be accessed from the main thread,
// so use an instance of the ResultHandler class to access the results of
// execution from another thread.
// Exactly one of OnResult and OnTimeout will be called. After one of these
// is called, the ScriptExectutorResult object will no longer hold a pointer
// to the ResultHandler instance, so it's safe for the owning thread to
// destroy it.
class ResultHandler {
public:
virtual void OnResult(const std::string& result) = 0;
virtual void OnTimeout() = 0;
};
explicit ScriptExecutorResult(ScriptExecutorResult::ResultHandler* handler)
: result_handler_(handler) {}
void OnResult(const std::string& result) {
DCHECK(thread_checker_.CalledOnValidThread());
if (result_handler_) {
result_handler_->OnResult(result);
result_handler_ = NULL;
}
}
void OnTimeout() {
DCHECK(thread_checker_.CalledOnValidThread());
if (result_handler_) {
result_handler_->OnTimeout();
result_handler_ = NULL;
}
}
DEFINE_WRAPPABLE_TYPE(ScriptExecutorResult);
private:
base::ThreadChecker thread_checker_;
ResultHandler* result_handler_;
};
} // namespace webdriver
} // namespace cobalt
#endif // defined(ENABLE_WEBDRIVER)
#endif // COBALT_WEBDRIVER_SCRIPT_EXECUTOR_RESULT_H_