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 "chrome/browser/chromeos/drive/drive_resource_metadata.h" | 5 #include "chrome/browser/chromeos/drive/drive_resource_metadata.h" |
6 | 6 |
7 #include <leveldb/db.h> | 7 #include <leveldb/db.h> |
8 #include <stack> | 8 #include <stack> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 DriveResourceMetadata::DriveResourceMetadata( | 155 DriveResourceMetadata::DriveResourceMetadata( |
156 const std::string& root_resource_id, | 156 const std::string& root_resource_id, |
157 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner) | 157 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner) |
158 : blocking_task_runner_(blocking_task_runner), | 158 : blocking_task_runner_(blocking_task_runner), |
159 storage_(new DriveResourceMetadataStorageMemory), | 159 storage_(new DriveResourceMetadataStorageMemory), |
160 root_resource_id_(root_resource_id), | 160 root_resource_id_(root_resource_id), |
161 serialized_size_(0), | 161 serialized_size_(0), |
162 largest_changestamp_(0), | 162 largest_changestamp_(0), |
163 loaded_(false), | 163 loaded_(false), |
164 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { | 164 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { |
| 165 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 166 |
165 DriveEntryProto root; | 167 DriveEntryProto root; |
166 root.mutable_file_info()->set_is_directory(true); | 168 root.mutable_file_info()->set_is_directory(true); |
167 root.set_resource_id(root_resource_id); | 169 root.set_resource_id(root_resource_id); |
168 root.set_title(kDriveRootDirectory); | 170 root.set_title(kDriveRootDirectory); |
169 storage_->PutEntry(CreateEntryWithProperBaseName(root)); | 171 storage_->PutEntry(CreateEntryWithProperBaseName(root)); |
170 } | 172 } |
171 | 173 |
| 174 void DriveResourceMetadata::Destroy() { |
| 175 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 176 |
| 177 ClearRoot(); |
| 178 weak_ptr_factory_.InvalidateWeakPtrs(); |
| 179 blocking_task_runner_->PostTask( |
| 180 FROM_HERE, |
| 181 base::Bind(&DriveResourceMetadata::DestroyOnBlockingPool, |
| 182 base::Unretained(this))); |
| 183 } |
| 184 |
172 DriveResourceMetadata::~DriveResourceMetadata() { | 185 DriveResourceMetadata::~DriveResourceMetadata() { |
173 ClearRoot(); | 186 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
| 187 } |
| 188 |
| 189 void DriveResourceMetadata::DestroyOnBlockingPool() { |
| 190 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
| 191 delete this; |
174 } | 192 } |
175 | 193 |
176 void DriveResourceMetadata::ClearRoot() { | 194 void DriveResourceMetadata::ClearRoot() { |
177 if (root_resource_id_.empty()) | 195 if (root_resource_id_.empty()) |
178 return; | 196 return; |
179 | 197 |
180 RemoveDirectoryChildren(root_resource_id_); | 198 RemoveDirectoryChildren(root_resource_id_); |
181 storage_->RemoveEntry(root_resource_id_); | 199 storage_->RemoveEntry(root_resource_id_); |
182 root_resource_id_.clear(); | 200 root_resource_id_.clear(); |
183 } | 201 } |
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
867 CreateEntryWithProperBaseName(proto.drive_directory().drive_entry())); | 885 CreateEntryWithProperBaseName(proto.drive_directory().drive_entry())); |
868 AddDescendantsFromProto(proto.drive_directory()); | 886 AddDescendantsFromProto(proto.drive_directory()); |
869 | 887 |
870 loaded_ = true; | 888 loaded_ = true; |
871 largest_changestamp_ = proto.largest_changestamp(); | 889 largest_changestamp_ = proto.largest_changestamp(); |
872 | 890 |
873 return true; | 891 return true; |
874 } | 892 } |
875 | 893 |
876 } // namespace drive | 894 } // namespace drive |
OLD | NEW |