blob: aa68d80446497e5d33c2dcc12c4d202a4d82f3f7 [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_