OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "sync/engine/download_updates_command.h" | 5 #include "sync/engine/download_updates_command.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "sync/engine/syncer.h" | 10 #include "sync/engine/syncer.h" |
11 #include "sync/engine/syncer_proto_util.h" | 11 #include "sync/engine/syncer_proto_util.h" |
12 #include "sync/internal_api/public/base/model_type_payload_map.h" | 12 #include "sync/internal_api/public/base/model_type_payload_map.h" |
13 #include "sync/syncable/directory.h" | 13 #include "sync/syncable/directory.h" |
14 #include "sync/syncable/read_transaction.h" | |
14 | 15 |
15 using sync_pb::DebugInfo; | 16 using sync_pb::DebugInfo; |
16 | 17 |
17 namespace syncer { | 18 namespace syncer { |
18 using sessions::StatusController; | 19 using sessions::StatusController; |
19 using sessions::SyncSession; | 20 using sessions::SyncSession; |
20 using std::string; | 21 using std::string; |
21 | 22 |
22 DownloadUpdatesCommand::DownloadUpdatesCommand( | 23 DownloadUpdatesCommand::DownloadUpdatesCommand( |
23 bool create_mobile_bookmarks_folder) | 24 bool create_mobile_bookmarks_folder) |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
55 dir->GetDownloadProgress(it.Get(), progress_marker); | 56 dir->GetDownloadProgress(it.Get(), progress_marker); |
56 | 57 |
57 // Set notification hint if present. | 58 // Set notification hint if present. |
58 syncer::ModelTypePayloadMap::const_iterator type_payload = | 59 syncer::ModelTypePayloadMap::const_iterator type_payload = |
59 type_payload_map.find(it.Get()); | 60 type_payload_map.find(it.Get()); |
60 if (type_payload != type_payload_map.end()) { | 61 if (type_payload != type_payload_map.end()) { |
61 progress_marker->set_notification_hint(type_payload->second); | 62 progress_marker->set_notification_hint(type_payload->second); |
62 } | 63 } |
63 } | 64 } |
64 | 65 |
66 bool need_encryption_key = false; | |
67 if (session->context()->keystore_encryption_enabled()) { | |
68 syncable::Directory* dir = session->context()->directory(); | |
69 syncable::ReadTransaction trans(FROM_HERE, dir); | |
70 Cryptographer* cryptographer = | |
71 session->context()->directory()->GetCryptographer(&trans); | |
72 need_encryption_key = !cryptographer->HasKeystoreKey(); | |
73 get_updates->set_need_encryption_key(need_encryption_key); | |
74 | |
75 } | |
76 | |
65 // We want folders for our associated types, always. If we were to set | 77 // We want folders for our associated types, always. If we were to set |
66 // this to false, the server would send just the non-container items | 78 // this to false, the server would send just the non-container items |
67 // (e.g. Bookmark URLs but not their containing folders). | 79 // (e.g. Bookmark URLs but not their containing folders). |
68 get_updates->set_fetch_folders(true); | 80 get_updates->set_fetch_folders(true); |
69 | 81 |
70 // Set GetUpdatesMessage.GetUpdatesCallerInfo information. | 82 // Set GetUpdatesMessage.GetUpdatesCallerInfo information. |
71 get_updates->mutable_caller_info()->set_source( | 83 get_updates->mutable_caller_info()->set_source( |
72 session->source().updates_source); | 84 session->source().updates_source); |
73 get_updates->mutable_caller_info()->set_notifications_enabled( | 85 get_updates->mutable_caller_info()->set_notifications_enabled( |
74 session->context()->notifications_enabled()); | 86 session->context()->notifications_enabled()); |
(...skipping 21 matching lines...) Expand all Loading... | |
96 return result; | 108 return result; |
97 } | 109 } |
98 | 110 |
99 status->mutable_updates_response()->CopyFrom(update_response); | 111 status->mutable_updates_response()->CopyFrom(update_response); |
100 | 112 |
101 DVLOG(1) << "GetUpdates " | 113 DVLOG(1) << "GetUpdates " |
102 << " returned " << update_response.get_updates().entries_size() | 114 << " returned " << update_response.get_updates().entries_size() |
103 << " updates and indicated " | 115 << " updates and indicated " |
104 << update_response.get_updates().changes_remaining() | 116 << update_response.get_updates().changes_remaining() |
105 << " updates left on server."; | 117 << " updates left on server."; |
118 | |
119 if (need_encryption_key) { | |
tim (not reviewing)
2012/07/26 21:53:15
Can you put this into a helper method for sake of
Nicolas Zea
2012/07/27 00:43:15
Done.
| |
120 bool success = false; | |
121 if (update_response.get_updates().has_encryption_key()) { | |
122 syncable::Directory* dir = session->context()->directory(); | |
123 syncable::ReadTransaction trans(FROM_HERE, dir); | |
124 Cryptographer* cryptographer = | |
125 session->context()->directory()->GetCryptographer(&trans); | |
126 success = cryptographer->SetKeystoreKey( | |
127 update_response.get_updates().encryption_key()); | |
128 | |
129 DVLOG(1) << "GetUpdates returned encryption key of length " | |
130 << update_response.get_updates().encryption_key().length() | |
131 << ". Cryptographer keystore key " | |
132 << (success ? "" : "not ") << "updated."; | |
133 } else { | |
134 LOG(ERROR) << "Failed to receive encryption key from server."; | |
135 } | |
136 status->set_last_get_key_result( | |
137 success ? SYNCER_OK : SERVER_RESPONSE_VALIDATION_FAILED); | |
138 } | |
139 | |
106 return result; | 140 return result; |
107 } | 141 } |
108 | 142 |
109 void DownloadUpdatesCommand::AppendClientDebugInfoIfNeeded( | 143 void DownloadUpdatesCommand::AppendClientDebugInfoIfNeeded( |
110 sessions::SyncSession* session, | 144 sessions::SyncSession* session, |
111 DebugInfo* debug_info) { | 145 DebugInfo* debug_info) { |
112 // We want to send the debug info only once per sync cycle. Check if it has | 146 // We want to send the debug info only once per sync cycle. Check if it has |
113 // already been sent. | 147 // already been sent. |
114 if (!session->status_controller().debug_info_sent()) { | 148 if (!session->status_controller().debug_info_sent()) { |
115 DVLOG(1) << "Sending client debug info ..."; | 149 DVLOG(1) << "Sending client debug info ..."; |
116 // could be null in some unit tests. | 150 // could be null in some unit tests. |
117 if (session->context()->debug_info_getter()) { | 151 if (session->context()->debug_info_getter()) { |
118 session->context()->debug_info_getter()->GetAndClearDebugInfo( | 152 session->context()->debug_info_getter()->GetAndClearDebugInfo( |
119 debug_info); | 153 debug_info); |
120 } | 154 } |
121 session->mutable_status_controller()->set_debug_info_sent(); | 155 session->mutable_status_controller()->set_debug_info_sent(); |
122 } | 156 } |
123 } | 157 } |
124 | 158 |
125 } // namespace syncer | 159 } // namespace syncer |
OLD | NEW |