| OLD | NEW | 
|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "google_apis/gcm/engine/gcm_store_impl.h" | 5 #include "google_apis/gcm/engine/gcm_store_impl.h" | 
| 6 | 6 | 
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" | 
| 8 #include "base/bind.h" | 8 #include "base/bind.h" | 
| 9 #include "base/callback.h" | 9 #include "base/callback.h" | 
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" | 
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 163   void SetGServicesSettings( | 163   void SetGServicesSettings( | 
| 164       const std::map<std::string, std::string>& settings, | 164       const std::map<std::string, std::string>& settings, | 
| 165       const std::string& digest, | 165       const std::string& digest, | 
| 166       const UpdateCallback& callback); | 166       const UpdateCallback& callback); | 
| 167   void AddAccountMapping(const AccountMapping& account_mapping, | 167   void AddAccountMapping(const AccountMapping& account_mapping, | 
| 168                          const UpdateCallback& callback); | 168                          const UpdateCallback& callback); | 
| 169   void RemoveAccountMapping(const std::string& account_id, | 169   void RemoveAccountMapping(const std::string& account_id, | 
| 170                             const UpdateCallback& callback); | 170                             const UpdateCallback& callback); | 
| 171   void SetLastTokenFetchTime(const base::Time& time, | 171   void SetLastTokenFetchTime(const base::Time& time, | 
| 172                              const UpdateCallback& callback); | 172                              const UpdateCallback& callback); | 
|  | 173   void SetValue(const std::string& key, | 
|  | 174                 const std::string& value, | 
|  | 175                 const UpdateCallback& callback); | 
| 173 | 176 | 
| 174  private: | 177  private: | 
| 175   friend class base::RefCountedThreadSafe<Backend>; | 178   friend class base::RefCountedThreadSafe<Backend>; | 
| 176   ~Backend(); | 179   ~Backend(); | 
| 177 | 180 | 
| 178   bool LoadDeviceCredentials(uint64* android_id, uint64* security_token); | 181   bool LoadDeviceCredentials(uint64* android_id, uint64* security_token); | 
| 179   bool LoadRegistrations(RegistrationInfoMap* registrations); | 182   bool LoadRegistrations(RegistrationInfoMap* registrations); | 
| 180   bool LoadIncomingMessages(std::vector<std::string>* incoming_messages); | 183   bool LoadIncomingMessages(std::vector<std::string>* incoming_messages); | 
| 181   bool LoadOutgoingMessages(OutgoingMessageMap* outgoing_messages); | 184   bool LoadOutgoingMessages(OutgoingMessageMap* outgoing_messages); | 
| 182   bool LoadLastCheckinInfo(base::Time* last_checkin_time, | 185   bool LoadLastCheckinInfo(base::Time* last_checkin_time, | 
| (...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 640   const leveldb::Status s = | 643   const leveldb::Status s = | 
| 641       db_->Put(write_options, | 644       db_->Put(write_options, | 
| 642                MakeSlice(kLastTokenFetchTimeKey), | 645                MakeSlice(kLastTokenFetchTimeKey), | 
| 643                MakeSlice(base::Int64ToString(time.ToInternalValue()))); | 646                MakeSlice(base::Int64ToString(time.ToInternalValue()))); | 
| 644 | 647 | 
| 645   if (!s.ok()) | 648   if (!s.ok()) | 
| 646     LOG(ERROR) << "LevelDB setting last token fetching time: " << s.ToString(); | 649     LOG(ERROR) << "LevelDB setting last token fetching time: " << s.ToString(); | 
| 647   foreground_task_runner_->PostTask(FROM_HERE, base::Bind(callback, s.ok())); | 650   foreground_task_runner_->PostTask(FROM_HERE, base::Bind(callback, s.ok())); | 
| 648 } | 651 } | 
| 649 | 652 | 
|  | 653 void GCMStoreImpl::Backend::SetValue(const std::string& key, | 
|  | 654                                      const std::string& value, | 
|  | 655                                      const UpdateCallback& callback) { | 
|  | 656   DVLOG(1) << "Injecting a value to GCM Store for testing. Key: " | 
|  | 657            << key << ", Value: " << value; | 
|  | 658   if (!db_.get()) { | 
|  | 659     LOG(ERROR) << "GCMStore db doesn't exist."; | 
|  | 660     foreground_task_runner_->PostTask(FROM_HERE, base::Bind(callback, false)); | 
|  | 661     return; | 
|  | 662   } | 
|  | 663 | 
|  | 664   leveldb::WriteOptions write_options; | 
|  | 665   write_options.sync = true; | 
|  | 666 | 
|  | 667   const leveldb::Status s = | 
|  | 668       db_->Put(write_options, MakeSlice(key), MakeSlice(value)); | 
|  | 669 | 
|  | 670   if (!s.ok()) | 
|  | 671     LOG(ERROR) << "LevelDB had problems injecting a value: " << s.ToString(); | 
|  | 672   foreground_task_runner_->PostTask(FROM_HERE, base::Bind(callback, s.ok())); | 
|  | 673 } | 
|  | 674 | 
| 650 bool GCMStoreImpl::Backend::LoadDeviceCredentials(uint64* android_id, | 675 bool GCMStoreImpl::Backend::LoadDeviceCredentials(uint64* android_id, | 
| 651                                                   uint64* security_token) { | 676                                                   uint64* security_token) { | 
| 652   leveldb::ReadOptions read_options; | 677   leveldb::ReadOptions read_options; | 
| 653   read_options.verify_checksums = true; | 678   read_options.verify_checksums = true; | 
| 654 | 679 | 
| 655   std::string result; | 680   std::string result; | 
| 656   leveldb::Status s = db_->Get(read_options, MakeSlice(kDeviceAIDKey), &result); | 681   leveldb::Status s = db_->Get(read_options, MakeSlice(kDeviceAIDKey), &result); | 
| 657   if (s.ok()) { | 682   if (s.ok()) { | 
| 658     if (!base::StringToUint64(result, android_id)) { | 683     if (!base::StringToUint64(result, android_id)) { | 
| 659       LOG(ERROR) << "Failed to restore device id."; | 684       LOG(ERROR) << "Failed to restore device id."; | 
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 766     base::Time* last_checkin_time, | 791     base::Time* last_checkin_time, | 
| 767     std::set<std::string>* accounts) { | 792     std::set<std::string>* accounts) { | 
| 768   leveldb::ReadOptions read_options; | 793   leveldb::ReadOptions read_options; | 
| 769   read_options.verify_checksums = true; | 794   read_options.verify_checksums = true; | 
| 770 | 795 | 
| 771   std::string result; | 796   std::string result; | 
| 772   leveldb::Status s = db_->Get(read_options, | 797   leveldb::Status s = db_->Get(read_options, | 
| 773                                MakeSlice(kLastCheckinTimeKey), | 798                                MakeSlice(kLastCheckinTimeKey), | 
| 774                                &result); | 799                                &result); | 
| 775   int64 time_internal = 0LL; | 800   int64 time_internal = 0LL; | 
| 776   if (s.ok() && !base::StringToInt64(result, &time_internal)) | 801   if (s.ok() && !base::StringToInt64(result, &time_internal)) { | 
| 777     LOG(ERROR) << "Failed to restore last checkin time. Using default = 0."; | 802     LOG(ERROR) << "Failed to restore last checkin time. Using default = 0."; | 
|  | 803     time_internal = 0LL; | 
|  | 804   } | 
| 778 | 805 | 
| 779   // In case we cannot read last checkin time, we default it to 0, as we don't | 806   // In case we cannot read last checkin time, we default it to 0, as we don't | 
| 780   // want that situation to cause the whole load to fail. | 807   // want that situation to cause the whole load to fail. | 
| 781   *last_checkin_time = base::Time::FromInternalValue(time_internal); | 808   *last_checkin_time = base::Time::FromInternalValue(time_internal); | 
| 782 | 809 | 
| 783   accounts->clear(); | 810   accounts->clear(); | 
| 784   s = db_->Get(read_options, MakeSlice(kLastCheckinAccountsKey), &result); | 811   s = db_->Get(read_options, MakeSlice(kLastCheckinAccountsKey), &result); | 
| 785   if (!s.ok()) | 812   if (!s.ok()) | 
| 786     DVLOG(1) << "No accounts where stored during last run."; | 813     DVLOG(1) << "No accounts where stored during last run."; | 
| 787 | 814 | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 845 | 872 | 
| 846 bool GCMStoreImpl::Backend::LoadLastTokenFetchTime( | 873 bool GCMStoreImpl::Backend::LoadLastTokenFetchTime( | 
| 847     base::Time* last_token_fetch_time) { | 874     base::Time* last_token_fetch_time) { | 
| 848   leveldb::ReadOptions read_options; | 875   leveldb::ReadOptions read_options; | 
| 849   read_options.verify_checksums = true; | 876   read_options.verify_checksums = true; | 
| 850 | 877 | 
| 851   std::string result; | 878   std::string result; | 
| 852   leveldb::Status s = | 879   leveldb::Status s = | 
| 853       db_->Get(read_options, MakeSlice(kLastTokenFetchTimeKey), &result); | 880       db_->Get(read_options, MakeSlice(kLastTokenFetchTimeKey), &result); | 
| 854   int64 time_internal = 0LL; | 881   int64 time_internal = 0LL; | 
| 855   if (s.ok() && !base::StringToInt64(result, &time_internal)) | 882   if (s.ok() && !base::StringToInt64(result, &time_internal)) { | 
| 856     LOG(ERROR) << "Failed to restore last checkin time. Using default = 0."; | 883     LOG(ERROR) << | 
|  | 884         "Failed to restore last token fetching time. Using default = 0."; | 
|  | 885     time_internal = 0LL; | 
|  | 886   } | 
| 857 | 887 | 
| 858   // In case we cannot read last token fetching time, we default it to 0. | 888   // In case we cannot read last token fetching time, we default it to 0. | 
| 859   *last_token_fetch_time = base::Time::FromInternalValue(time_internal); | 889   *last_token_fetch_time = base::Time::FromInternalValue(time_internal); | 
| 860 | 890 | 
| 861   return true; | 891   return true; | 
| 862 } | 892 } | 
| 863 | 893 | 
| 864 GCMStoreImpl::GCMStoreImpl( | 894 GCMStoreImpl::GCMStoreImpl( | 
| 865     const base::FilePath& path, | 895     const base::FilePath& path, | 
| 866     scoped_refptr<base::SequencedTaskRunner> blocking_task_runner, | 896     scoped_refptr<base::SequencedTaskRunner> blocking_task_runner, | 
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1083 void GCMStoreImpl::SetLastTokenFetchTime(const base::Time& time, | 1113 void GCMStoreImpl::SetLastTokenFetchTime(const base::Time& time, | 
| 1084                                          const UpdateCallback& callback) { | 1114                                          const UpdateCallback& callback) { | 
| 1085   blocking_task_runner_->PostTask( | 1115   blocking_task_runner_->PostTask( | 
| 1086       FROM_HERE, | 1116       FROM_HERE, | 
| 1087       base::Bind(&GCMStoreImpl::Backend::SetLastTokenFetchTime, | 1117       base::Bind(&GCMStoreImpl::Backend::SetLastTokenFetchTime, | 
| 1088                  backend_, | 1118                  backend_, | 
| 1089                  time, | 1119                  time, | 
| 1090                  callback)); | 1120                  callback)); | 
| 1091 } | 1121 } | 
| 1092 | 1122 | 
|  | 1123 void GCMStoreImpl::SetValueForTesting(const std::string& key, | 
|  | 1124                                       const std::string& value, | 
|  | 1125                                       const UpdateCallback& callback) { | 
|  | 1126   blocking_task_runner_->PostTask( | 
|  | 1127       FROM_HERE, | 
|  | 1128       base::Bind(&GCMStoreImpl::Backend::SetValue, | 
|  | 1129                  backend_, | 
|  | 1130                  key, | 
|  | 1131                  value, | 
|  | 1132                  callback)); | 
|  | 1133 } | 
|  | 1134 | 
| 1093 void GCMStoreImpl::LoadContinuation(const LoadCallback& callback, | 1135 void GCMStoreImpl::LoadContinuation(const LoadCallback& callback, | 
| 1094                                     scoped_ptr<LoadResult> result) { | 1136                                     scoped_ptr<LoadResult> result) { | 
| 1095   if (!result->success) { | 1137   if (!result->success) { | 
| 1096     callback.Run(result.Pass()); | 1138     callback.Run(result.Pass()); | 
| 1097     return; | 1139     return; | 
| 1098   } | 1140   } | 
| 1099   int num_throttled_apps = 0; | 1141   int num_throttled_apps = 0; | 
| 1100   for (OutgoingMessageMap::const_iterator | 1142   for (OutgoingMessageMap::const_iterator | 
| 1101            iter = result->outgoing_messages.begin(); | 1143            iter = result->outgoing_messages.begin(); | 
| 1102        iter != result->outgoing_messages.end(); ++iter) { | 1144        iter != result->outgoing_messages.end(); ++iter) { | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1137            removed_message_counts.begin(); | 1179            removed_message_counts.begin(); | 
| 1138        iter != removed_message_counts.end(); ++iter) { | 1180        iter != removed_message_counts.end(); ++iter) { | 
| 1139     DCHECK_NE(app_message_counts_.count(iter->first), 0U); | 1181     DCHECK_NE(app_message_counts_.count(iter->first), 0U); | 
| 1140     app_message_counts_[iter->first] -= iter->second; | 1182     app_message_counts_[iter->first] -= iter->second; | 
| 1141     DCHECK_GE(app_message_counts_[iter->first], 0); | 1183     DCHECK_GE(app_message_counts_[iter->first], 0); | 
| 1142   } | 1184   } | 
| 1143   callback.Run(true); | 1185   callback.Run(true); | 
| 1144 } | 1186 } | 
| 1145 | 1187 | 
| 1146 }  // namespace gcm | 1188 }  // namespace gcm | 
| OLD | NEW | 
|---|