1 // Copyright (c) 2013 The Chromium Authors. 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.
6 #include "base/message_loop.h"
7 #include "chromeos/dbus/fake_gsm_sms_client.h"
11 FakeGsmSMSClient::FakeGsmSMSClient()
13 sms_test_message_switch_present_(false),
14 weak_ptr_factory_(this) {
15 test_messages_
.push_back("Test Message 0");
16 test_messages_
.push_back("Test Message 1");
17 test_messages_
.push_back("Test a relatively long message 2");
18 test_messages_
.push_back("Test a very, the quick brown fox jumped"
19 " over the lazy dog, long message 3");
20 test_messages_
.push_back("Test Message 4");
21 test_messages_
.push_back("Test Message 5");
22 test_messages_
.push_back("Test Message 6");
25 FakeGsmSMSClient::~FakeGsmSMSClient() {}
27 void FakeGsmSMSClient::SetSmsReceivedHandler(
28 const std::string
& service_name
,
29 const dbus::ObjectPath
& object_path
,
30 const SmsReceivedHandler
& handler
) {
34 void FakeGsmSMSClient::ResetSmsReceivedHandler(
35 const std::string
& service_name
,
36 const dbus::ObjectPath
& object_path
) {
40 void FakeGsmSMSClient::Delete(const std::string
& service_name
,
41 const dbus::ObjectPath
& object_path
,
43 const DeleteCallback
& callback
) {
44 message_list_
.Remove(index
, NULL
);
48 void FakeGsmSMSClient::Get(const std::string
& service_name
,
49 const dbus::ObjectPath
& object_path
,
51 const GetCallback
& callback
) {
52 base::DictionaryValue
* dictionary
= NULL
;
53 if (message_list_
.GetDictionary(index
, &dictionary
)) {
54 callback
.Run(*dictionary
);
57 base::DictionaryValue empty_dictionary
;
58 callback
.Run(empty_dictionary
);
61 void FakeGsmSMSClient::List(const std::string
& service_name
,
62 const dbus::ObjectPath
& object_path
,
63 const ListCallback
& callback
) {
64 callback
.Run(message_list_
);
67 void FakeGsmSMSClient::RequestUpdate(const std::string
& service_name
,
68 const dbus::ObjectPath
& object_path
) {
69 if (!sms_test_message_switch_present_
)
75 // Call PushTestMessageChain asynchronously so that the handler_ callback
76 // does not get called from the update request.
77 base::MessageLoop::current()->PostTask(
79 base::Bind(&FakeGsmSMSClient::PushTestMessageChain
,
80 weak_ptr_factory_
.GetWeakPtr()));
83 void FakeGsmSMSClient::PushTestMessageChain() {
84 if (PushTestMessage())
85 PushTestMessageDelayed();
88 void FakeGsmSMSClient::PushTestMessageDelayed() {
89 const int kSmsMessageDelaySeconds
= 5;
90 base::MessageLoop::current()->PostDelayedTask(
92 base::Bind(&FakeGsmSMSClient::PushTestMessageChain
,
93 weak_ptr_factory_
.GetWeakPtr()),
94 base::TimeDelta::FromSeconds(kSmsMessageDelaySeconds
));
97 bool FakeGsmSMSClient::PushTestMessage() {
98 if (test_index_
>= static_cast<int>(test_messages_
.size()))
100 base::DictionaryValue
* message
= new base::DictionaryValue
;
101 message
->SetString("number", "000-000-0000");
102 message
->SetString("text", test_messages_
[test_index_
]);
103 message
->SetInteger("index", test_index_
);
104 int msg_index
= message_list_
.GetSize();
105 message_list_
.Append(message
);
106 if (!handler_
.is_null())
107 handler_
.Run(msg_index
, true);
112 } // namespace chromeos