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

Side by Side Diff: webkit/appcache/appcache_response.cc

Issue 9110017: AppCache: Use WeakPtr instead of base::Unretained for DiskCache callbacks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 11 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "webkit/appcache/appcache_response.h" 5 #include "webkit/appcache/appcache_response.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 } 241 }
242 242
243 void AppCacheResponseReader::OpenEntryIfNeededAndContinue() { 243 void AppCacheResponseReader::OpenEntryIfNeededAndContinue() {
244 int rv; 244 int rv;
245 AppCacheDiskCacheInterface::Entry** entry_ptr = NULL; 245 AppCacheDiskCacheInterface::Entry** entry_ptr = NULL;
246 if (entry_) { 246 if (entry_) {
247 rv = net::OK; 247 rv = net::OK;
248 } else if (!disk_cache_) { 248 } else if (!disk_cache_) {
249 rv = net::ERR_FAILED; 249 rv = net::ERR_FAILED;
250 } else { 250 } else {
251 entry_ptr = new(AppCacheDiskCacheInterface::Entry*); 251 entry_ptr = new AppCacheDiskCacheInterface::Entry*;
252 open_callback_ = 252 open_callback_ =
253 base::Bind(&AppCacheResponseReader::OnOpenEntryComplete, 253 base::Bind(&AppCacheResponseReader::OnOpenEntryComplete,
254 weak_factory_.GetWeakPtr(), base::Owned(entry_ptr)); 254 weak_factory_.GetWeakPtr(), base::Owned(entry_ptr));
255 rv = disk_cache_->OpenEntry(response_id_, entry_ptr, open_callback_); 255 rv = disk_cache_->OpenEntry(response_id_, entry_ptr, open_callback_);
256 } 256 }
257 257
258 if (rv != net::ERR_IO_PENDING) 258 if (rv != net::ERR_IO_PENDING)
259 OnOpenEntryComplete(entry_ptr, rv); 259 OnOpenEntryComplete(entry_ptr, rv);
260 } 260 }
261 261
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 int rv; 361 int rv;
362 AppCacheDiskCacheInterface::Entry** entry_ptr = NULL; 362 AppCacheDiskCacheInterface::Entry** entry_ptr = NULL;
363 if (entry_) { 363 if (entry_) {
364 creation_phase_ = NO_ATTEMPT; 364 creation_phase_ = NO_ATTEMPT;
365 rv = net::OK; 365 rv = net::OK;
366 } else if (!disk_cache_) { 366 } else if (!disk_cache_) {
367 creation_phase_ = NO_ATTEMPT; 367 creation_phase_ = NO_ATTEMPT;
368 rv = net::ERR_FAILED; 368 rv = net::ERR_FAILED;
369 } else { 369 } else {
370 creation_phase_ = INITIAL_ATTEMPT; 370 creation_phase_ = INITIAL_ATTEMPT;
371 entry_ptr = new(AppCacheDiskCacheInterface::Entry*); 371 entry_ptr = new AppCacheDiskCacheInterface::Entry*;
372 create_callback_ = 372 create_callback_ =
373 base::Bind(&AppCacheResponseWriter::OnCreateEntryComplete, 373 base::Bind(&AppCacheResponseWriter::OnCreateEntryComplete,
374 base::Unretained(this), base::Owned(entry_ptr)); 374 weak_factory_.GetWeakPtr(), base::Owned(entry_ptr));
375 rv = disk_cache_->CreateEntry(response_id_, entry_ptr, create_callback_); 375 rv = disk_cache_->CreateEntry(response_id_, entry_ptr, create_callback_);
376 } 376 }
377 if (rv != net::ERR_IO_PENDING) 377 if (rv != net::ERR_IO_PENDING)
378 OnCreateEntryComplete(entry_ptr, rv); 378 OnCreateEntryComplete(entry_ptr, rv);
379 } 379 }
380 380
381 void AppCacheResponseWriter::OnCreateEntryComplete( 381 void AppCacheResponseWriter::OnCreateEntryComplete(
382 AppCacheDiskCacheInterface::Entry** entry, int rv) { 382 AppCacheDiskCacheInterface::Entry** entry, int rv) {
383 DCHECK(info_buffer_.get() || buffer_.get()); 383 DCHECK(info_buffer_.get() || buffer_.get());
384 384
385 AppCacheDiskCacheInterface::Entry** entry_ptr = NULL;
386
387 if (creation_phase_ == INITIAL_ATTEMPT) { 385 if (creation_phase_ == INITIAL_ATTEMPT) {
388 if (rv != net::OK) { 386 if (rv != net::OK) {
389 // We may try to overwrite existing entries. 387 // We may try to overwrite existing entries.
390 creation_phase_ = DOOM_EXISTING; 388 creation_phase_ = DOOM_EXISTING;
391 rv = disk_cache_->DoomEntry(response_id_, create_callback_); 389 rv = disk_cache_->DoomEntry(response_id_, create_callback_);
392 if (rv != net::ERR_IO_PENDING) 390 if (rv != net::ERR_IO_PENDING)
393 OnCreateEntryComplete(NULL, rv); 391 OnCreateEntryComplete(NULL, rv);
394 return; 392 return;
395 } 393 }
396 } else if (creation_phase_ == DOOM_EXISTING) { 394 } else if (creation_phase_ == DOOM_EXISTING) {
397 creation_phase_ = SECOND_ATTEMPT; 395 creation_phase_ = SECOND_ATTEMPT;
398 entry_ptr = new(AppCacheDiskCacheInterface::Entry*); 396 AppCacheDiskCacheInterface::Entry** entry_ptr =
397 new AppCacheDiskCacheInterface::Entry*;
399 create_callback_ = 398 create_callback_ =
400 base::Bind(&AppCacheResponseWriter::OnCreateEntryComplete, 399 base::Bind(&AppCacheResponseWriter::OnCreateEntryComplete,
401 base::Unretained(this), base::Owned(entry_ptr)); 400 weak_factory_.GetWeakPtr(), base::Owned(entry_ptr));
402 rv = disk_cache_->CreateEntry(response_id_, entry_ptr, create_callback_); 401 rv = disk_cache_->CreateEntry(response_id_, entry_ptr, create_callback_);
403 if (rv != net::ERR_IO_PENDING) 402 if (rv != net::ERR_IO_PENDING)
404 OnCreateEntryComplete(entry_ptr, rv); 403 OnCreateEntryComplete(entry_ptr, rv);
405 return; 404 return;
406 } 405 }
407 406
408 if (!create_callback_.is_null()) { 407 if (!create_callback_.is_null()) {
409 if (rv == net::OK) 408 if (rv == net::OK)
410 entry_ = *entry; 409 entry_ = *entry;
411 410
412 create_callback_.Reset(); 411 create_callback_.Reset();
413 } 412 }
414 413
415 if (info_buffer_) 414 if (info_buffer_)
416 ContinueWriteInfo(); 415 ContinueWriteInfo();
417 else 416 else
418 ContinueWriteData(); 417 ContinueWriteData();
419 } 418 }
420 419
421 } // namespace appcache 420 } // namespace appcache
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698