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 "net/disk_cache/entry_impl.h" | 5 #include "net/disk_cache/entry_impl.h" |
6 | 6 |
7 #include "base/hash.h" | 7 #include "base/hash.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 STRESS_DCHECK(next_addr.value() != entry_.address().value()); | 589 STRESS_DCHECK(next_addr.value() != entry_.address().value()); |
590 | 590 |
591 if (stored->state > ENTRY_DOOMED || stored->state < ENTRY_NORMAL) | 591 if (stored->state > ENTRY_DOOMED || stored->state < ENTRY_NORMAL) |
592 return false; | 592 return false; |
593 | 593 |
594 Addr key_addr(stored->long_key); | 594 Addr key_addr(stored->long_key); |
595 if ((stored->key_len <= kMaxInternalKeyLength && key_addr.is_initialized()) || | 595 if ((stored->key_len <= kMaxInternalKeyLength && key_addr.is_initialized()) || |
596 (stored->key_len > kMaxInternalKeyLength && !key_addr.is_initialized())) | 596 (stored->key_len > kMaxInternalKeyLength && !key_addr.is_initialized())) |
597 return false; | 597 return false; |
598 | 598 |
599 if (!key_addr.SanityCheck()) | 599 if (!key_addr.SanityCheckV2()) |
600 return false; | 600 return false; |
601 | 601 |
602 if (key_addr.is_initialized() && | 602 if (key_addr.is_initialized() && |
603 ((stored->key_len < kMaxBlockSize && key_addr.is_separate_file()) || | 603 ((stored->key_len < kMaxBlockSize && key_addr.is_separate_file()) || |
604 (stored->key_len >= kMaxBlockSize && key_addr.is_block_file()))) | 604 (stored->key_len >= kMaxBlockSize && key_addr.is_block_file()))) |
605 return false; | 605 return false; |
606 | 606 |
607 int num_blocks = NumBlocksForEntry(stored->key_len); | 607 int num_blocks = NumBlocksForEntry(stored->key_len); |
608 if (entry_.address().num_blocks() != num_blocks) | 608 if (entry_.address().num_blocks() != num_blocks) |
609 return false; | 609 return false; |
(...skipping 12 matching lines...) Expand all Loading... |
622 if (stored->hash != base::Hash(GetKey())) | 622 if (stored->hash != base::Hash(GetKey())) |
623 return false; | 623 return false; |
624 | 624 |
625 for (int i = 0; i < kNumStreams; i++) { | 625 for (int i = 0; i < kNumStreams; i++) { |
626 Addr data_addr(stored->data_addr[i]); | 626 Addr data_addr(stored->data_addr[i]); |
627 int data_size = stored->data_size[i]; | 627 int data_size = stored->data_size[i]; |
628 if (data_size < 0) | 628 if (data_size < 0) |
629 return false; | 629 return false; |
630 if (!data_size && data_addr.is_initialized()) | 630 if (!data_size && data_addr.is_initialized()) |
631 return false; | 631 return false; |
632 if (!data_addr.SanityCheck()) | 632 if (!data_addr.SanityCheckV2()) |
633 return false; | 633 return false; |
634 if (!data_size) | 634 if (!data_size) |
635 continue; | 635 continue; |
636 if (data_size <= kMaxBlockSize && data_addr.is_separate_file()) | 636 if (data_size <= kMaxBlockSize && data_addr.is_separate_file()) |
637 return false; | 637 return false; |
638 if (data_size > kMaxBlockSize && data_addr.is_block_file()) | 638 if (data_size > kMaxBlockSize && data_addr.is_block_file()) |
639 return false; | 639 return false; |
640 } | 640 } |
641 return true; | 641 return true; |
642 } | 642 } |
643 | 643 |
644 void EntryImpl::FixForDelete() { | 644 void EntryImpl::FixForDelete() { |
645 EntryStore* stored = entry_.Data(); | 645 EntryStore* stored = entry_.Data(); |
646 Addr key_addr(stored->long_key); | 646 Addr key_addr(stored->long_key); |
647 | 647 |
648 if (!key_addr.is_initialized()) | 648 if (!key_addr.is_initialized()) |
649 stored->key[stored->key_len] = '\0'; | 649 stored->key[stored->key_len] = '\0'; |
650 | 650 |
651 for (int i = 0; i < kNumStreams; i++) { | 651 for (int i = 0; i < kNumStreams; i++) { |
652 Addr data_addr(stored->data_addr[i]); | 652 Addr data_addr(stored->data_addr[i]); |
653 int data_size = stored->data_size[i]; | 653 int data_size = stored->data_size[i]; |
654 if (data_addr.is_initialized()) { | 654 if (data_addr.is_initialized()) { |
655 if ((data_size <= kMaxBlockSize && data_addr.is_separate_file()) || | 655 if ((data_size <= kMaxBlockSize && data_addr.is_separate_file()) || |
656 (data_size > kMaxBlockSize && data_addr.is_block_file()) || | 656 (data_size > kMaxBlockSize && data_addr.is_block_file()) || |
657 !data_addr.SanityCheck()) { | 657 !data_addr.SanityCheckV2()) { |
658 STRESS_NOTREACHED(); | 658 STRESS_NOTREACHED(); |
659 // The address is weird so don't attempt to delete it. | 659 // The address is weird so don't attempt to delete it. |
660 stored->data_addr[i] = 0; | 660 stored->data_addr[i] = 0; |
661 // In general, trust the stored size as it should be in sync with the | 661 // In general, trust the stored size as it should be in sync with the |
662 // total size tracked by the backend. | 662 // total size tracked by the backend. |
663 } | 663 } |
664 } | 664 } |
665 if (data_size < 0) | 665 if (data_size < 0) |
666 stored->data_size[i] = 0; | 666 stored->data_size[i] = 0; |
667 } | 667 } |
(...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1541 Trace("%s 0x%p 0x%x 0x%x", msg, reinterpret_cast<void*>(this), | 1541 Trace("%s 0x%p 0x%x 0x%x", msg, reinterpret_cast<void*>(this), |
1542 entry_.address().value(), node_.address().value()); | 1542 entry_.address().value(), node_.address().value()); |
1543 | 1543 |
1544 Trace(" data: 0x%x 0x%x 0x%x", entry_.Data()->data_addr[0], | 1544 Trace(" data: 0x%x 0x%x 0x%x", entry_.Data()->data_addr[0], |
1545 entry_.Data()->data_addr[1], entry_.Data()->long_key); | 1545 entry_.Data()->data_addr[1], entry_.Data()->long_key); |
1546 | 1546 |
1547 Trace(" doomed: %d 0x%x", doomed_, dirty); | 1547 Trace(" doomed: %d 0x%x", doomed_, dirty); |
1548 } | 1548 } |
1549 | 1549 |
1550 } // namespace disk_cache | 1550 } // namespace disk_cache |
OLD | NEW |