Upstream version 11.39.264.0
[platform/framework/web/crosswalk.git] / src / xwalk / extensions / common / xwalk_external_instance.cc
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.
4
5 #include "xwalk/extensions/common/xwalk_external_instance.h"
6
7 #include <string>
8 #include "base/logging.h"
9 #include "xwalk/extensions/common/xwalk_external_extension.h"
10 #include "xwalk/extensions/common/xwalk_external_adapter.h"
11
12 namespace xwalk {
13 namespace extensions {
14
15 XWalkExternalInstance::XWalkExternalInstance(
16     XWalkExternalExtension* extension, XW_Instance xw_instance)
17     : xw_instance_(xw_instance),
18       extension_(extension),
19       instance_data_(NULL),
20       is_handling_sync_msg_(false) {
21   XWalkExternalAdapter::GetInstance()->RegisterInstance(this);
22   XW_CreatedInstanceCallback callback = extension_->created_instance_callback_;
23   if (callback)
24     callback(xw_instance_);
25 }
26
27 XWalkExternalInstance::~XWalkExternalInstance() {
28   XW_DestroyedInstanceCallback callback =
29       extension_->destroyed_instance_callback_;
30   if (callback)
31     callback(xw_instance_);
32   XWalkExternalAdapter::GetInstance()->UnregisterInstance(this);
33 }
34
35 void XWalkExternalInstance::HandleMessage(scoped_ptr<base::Value> msg) {
36   XW_HandleMessageCallback callback = extension_->handle_msg_callback_;
37   if (!callback) {
38     LOG(WARNING) << "Ignoring message sent for external extension '"
39                  << extension_->name() << "' which doesn't support it.";
40     return;
41   }
42
43   std::string string_msg;
44   if (!msg->GetAsString(&string_msg)) {
45     LOG(WARNING) << "Failed to retrieve the message's value.";
46     return;
47   }
48   callback(xw_instance_, string_msg.c_str());
49 }
50
51 void XWalkExternalInstance::HandleSyncMessage(scoped_ptr<base::Value> msg) {
52   XW_HandleSyncMessageCallback callback = extension_->handle_sync_msg_callback_;
53   if (!callback) {
54     LOG(WARNING) << "Ignoring sync message sent for external extension '"
55                  << extension_->name() << "' which doesn't support it.";
56     return;
57   }
58
59   std::string string_msg;
60   if (!msg->GetAsString(&string_msg)) {
61     LOG(WARNING) << "Failed to retrieve the sync message's value.";
62     return;
63   }
64
65   callback(xw_instance_, string_msg.c_str());
66 }
67
68 void XWalkExternalInstance::CoreSetInstanceData(void* data) {
69   instance_data_ = data;
70 }
71
72 void* XWalkExternalInstance::CoreGetInstanceData() {
73   return instance_data_;
74 }
75
76 void XWalkExternalInstance::MessagingPostMessage(const char* msg) {
77   PostMessageToJS(scoped_ptr<base::Value>(new base::StringValue(msg)));
78 }
79
80 void XWalkExternalInstance::SyncMessagingSetSyncReply(const char* reply) {
81   SendSyncReplyToJS(scoped_ptr<base::Value>(new base::StringValue(reply)));
82 }
83
84 }  // namespace extensions
85 }  // namespace xwalk