1 // Copyright (c) 2013 Intel Corporation. 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.
5 #include "xwalk/application/test/application_testapi.h"
7 #include "content/public/browser/browser_thread.h"
8 #include "content/public/test/test_utils.h"
9 #include "grit/xwalk_application_resources.h"
10 #include "ui/base/resource/resource_bundle.h"
12 using content::BrowserThread;
15 const char kTestApiName[] = "xwalk.app.test";
17 const char kTestNotifyPass[] = "notifyPass";
18 const char kTestNotifyFail[] = "notifyFail";
19 const char kTestNotifyTimeout[] = "notifyTimeout";
23 ApiTestExtension::ApiTestExtension() {
24 set_name(kTestApiName);
25 set_javascript_api(ResourceBundle::GetSharedInstance().GetRawDataResource(
26 IDR_XWALK_APPLICATION_TEST_API).as_string());
29 xwalk::extensions::XWalkExtensionInstance* ApiTestExtension::CreateInstance() {
30 return new ApiTestExtensionInstance(observer_);
33 void ApiTestExtension::SetObserver(
34 ApiTestExtensionInstance::Observer* observer) {
38 ApiTestExtensionInstance::ApiTestExtensionInstance(
39 ApiTestExtensionInstance::Observer* observer)
40 : observer_(observer),
44 base::Bind(&ApiTestExtensionInstance::OnNotifyPass,
45 base::Unretained(this)));
48 base::Bind(&ApiTestExtensionInstance::OnNotifyFail,
49 base::Unretained(this)));
52 base::Bind(&ApiTestExtensionInstance::OnNotifyTimeout,
53 base::Unretained(this)));
56 void ApiTestExtensionInstance::HandleMessage(scoped_ptr<base::Value> msg) {
57 handler_.HandleMessage(msg.Pass());
60 void ApiTestExtensionInstance::OnNotifyPass(
61 scoped_ptr<XWalkExtensionFunctionInfo> info) {
63 observer_->OnTestNotificationReceived(info.Pass(), kTestNotifyPass);
66 void ApiTestExtensionInstance::OnNotifyFail(
67 scoped_ptr<XWalkExtensionFunctionInfo> info) {
69 observer_->OnTestNotificationReceived(info.Pass(), kTestNotifyFail);
72 void ApiTestExtensionInstance::OnNotifyTimeout(
73 scoped_ptr<XWalkExtensionFunctionInfo> info) {
75 observer_->OnTestNotificationReceived(info.Pass(), kTestNotifyTimeout);
78 ApiTestRunner::ApiTestRunner()
82 ApiTestRunner::~ApiTestRunner() {
85 bool ApiTestRunner::WaitForTestNotification() {
86 if (result_ != NOT_SET || message_loop_runner_)
89 message_loop_runner_ = new content::MessageLoopRunner;
90 message_loop_runner_->Run();
91 message_loop_runner_ = NULL;
95 void ApiTestRunner::OnTestNotificationReceived(
96 scoped_ptr<XWalkExtensionFunctionInfo> info,
97 const std::string& result_str) {
98 notify_func_info_.reset(info.release());
99 Result result = NOT_SET;
100 if (result_str == kTestNotifyPass)
102 else if (result_str == kTestNotifyFail)
104 else if (result_str == kTestNotifyTimeout)
109 CHECK(result != NOT_SET);
111 // It may be notified before wait really happens.
112 if (!message_loop_runner_)
115 message_loop_runner_->Quit();
118 void ApiTestRunner::PostResultToNotificationCallback() {
120 notify_func_info_->PostResult(
121 scoped_ptr<base::ListValue>(new base::ListValue));
124 ApiTestRunner::Result ApiTestRunner::GetTestsResult() const {
128 void ApiTestRunner::ResetResult() {
129 CHECK(!message_loop_runner_);