Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(184)

Side by Side Diff: chrome/browser/chromeos/drive/drive_resource_metadata.cc

Issue 12706012: chromeos: Destruct DriveResourceMetadata on the blocking pool (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add note Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698