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/extensions/common/xwalk_external_instance.h"
8 #include "base/logging.h"
9 #include "xwalk/extensions/common/xwalk_external_extension.h"
10 #include "xwalk/extensions/common/xwalk_external_adapter.h"
13 namespace extensions {
15 XWalkExternalInstance::XWalkExternalInstance(
16 XWalkExternalExtension* extension, XW_Instance xw_instance)
17 : xw_instance_(xw_instance),
18 extension_(extension),
20 is_handling_sync_msg_(false) {
21 XWalkExternalAdapter::GetInstance()->RegisterInstance(this);
22 XW_CreatedInstanceCallback callback = extension_->created_instance_callback_;
24 callback(xw_instance_);
27 XWalkExternalInstance::~XWalkExternalInstance() {
28 XW_DestroyedInstanceCallback callback =
29 extension_->destroyed_instance_callback_;
31 callback(xw_instance_);
32 XWalkExternalAdapter::GetInstance()->UnregisterInstance(this);
35 void XWalkExternalInstance::HandleMessage(scoped_ptr<base::Value> msg) {
36 XW_HandleMessageCallback callback = extension_->handle_msg_callback_;
38 LOG(WARNING) << "Ignoring message sent for external extension '"
39 << extension_->name() << "' which doesn't support it.";
43 std::string string_msg;
44 if (!msg->GetAsString(&string_msg)) {
45 LOG(WARNING) << "Failed to retrieve the message's value.";
48 callback(xw_instance_, string_msg.c_str());
51 void XWalkExternalInstance::HandleSyncMessage(scoped_ptr<base::Value> msg) {
52 XW_HandleSyncMessageCallback callback = extension_->handle_sync_msg_callback_;
54 LOG(WARNING) << "Ignoring sync message sent for external extension '"
55 << extension_->name() << "' which doesn't support it.";
59 std::string string_msg;
60 if (!msg->GetAsString(&string_msg)) {
61 LOG(WARNING) << "Failed to retrieve the sync message's value.";
65 callback(xw_instance_, string_msg.c_str());
68 void XWalkExternalInstance::CoreSetInstanceData(void* data) {
69 instance_data_ = data;
72 void* XWalkExternalInstance::CoreGetInstanceData() {
73 return instance_data_;
76 void XWalkExternalInstance::MessagingPostMessage(const char* msg) {
77 PostMessageToJS(scoped_ptr<base::Value>(new base::StringValue(msg)));
80 void XWalkExternalInstance::SyncMessagingSetSyncReply(const char* reply) {
81 SendSyncReplyToJS(scoped_ptr<base::Value>(new base::StringValue(reply)));
84 } // namespace extensions