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

Unified Diff: content/browser/fileapi/blob_storage_context_unittest.cc

Issue 973723002: Merge: Allow offsets in blobs larger than 2GB on 32 bit Chromium builds. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2311
Patch Set: Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | storage/browser/blob/blob_storage_context.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/fileapi/blob_storage_context_unittest.cc
diff --git a/content/browser/fileapi/blob_storage_context_unittest.cc b/content/browser/fileapi/blob_storage_context_unittest.cc
index 9602b3adcd02d0674441a7adeadbe23b7fa0ba50..29270b7dea925fa75d576778d04d7cbb0ac927c9 100644
--- a/content/browser/fileapi/blob_storage_context_unittest.cc
+++ b/content/browser/fileapi/blob_storage_context_unittest.cc
@@ -2,6 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "storage/browser/blob/blob_storage_context.h"
+
+#include <limits>
+#include <string>
+
#include "base/files/file_path.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
@@ -11,24 +16,19 @@
#include "content/browser/fileapi/blob_storage_host.h"
#include "storage/browser/blob/blob_data_builder.h"
#include "storage/browser/blob/blob_data_handle.h"
+#include "storage/browser/blob/blob_data_item.h"
#include "storage/browser/blob/blob_data_snapshot.h"
-#include "storage/browser/blob/blob_storage_context.h"
#include "testing/gtest/include/gtest/gtest.h"
using storage::BlobDataBuilder;
using storage::BlobDataHandle;
+using storage::BlobDataItem;
using storage::BlobDataSnapshot;
using storage::BlobStorageContext;
using storage::DataElement;
namespace content {
-
namespace {
-// This is necessary to clean up the blobs after the handles are released.
-void RunEventLoopTillIdle() {
- base::RunLoop run_loop;
- run_loop.RunUntilIdle();
-}
void SetupBasicBlob(BlobStorageHost* host, const std::string& id) {
EXPECT_TRUE(host->StartBuildingBlob(id));
@@ -38,6 +38,7 @@ void SetupBasicBlob(BlobStorageHost* host, const std::string& id) {
EXPECT_TRUE(host->FinishBuildingBlob(id, "text/plain"));
EXPECT_FALSE(host->StartBuildingBlob(id));
}
+
} // namespace
TEST(BlobStorageContextTest, IncrementDecrementRef) {
@@ -54,7 +55,7 @@ TEST(BlobStorageContextTest, IncrementDecrementRef) {
blob_data_handle = context.GetBlobDataFromUUID(kId);
EXPECT_TRUE(blob_data_handle);
blob_data_handle.reset();
- RunEventLoopTillIdle();
+ base::RunLoop().RunUntilIdle();
// Make sure its still there after inc/dec.
EXPECT_TRUE(host.IncrementBlobRefCount(kId));
@@ -62,7 +63,7 @@ TEST(BlobStorageContextTest, IncrementDecrementRef) {
blob_data_handle = context.GetBlobDataFromUUID(kId);
EXPECT_TRUE(blob_data_handle);
blob_data_handle.reset();
- RunEventLoopTillIdle();
+ base::RunLoop().RunUntilIdle();
// Make sure it goes away in the end.
EXPECT_TRUE(host.DecrementBlobRefCount(kId));
@@ -113,7 +114,7 @@ TEST(BlobStorageContextTest, BlobDataHandle) {
// Should disappear after dropping both handles.
blob_data_handle.reset();
another_handle.reset();
- RunEventLoopTillIdle();
+ base::RunLoop().RunUntilIdle();
blob_data_handle = context.GetBlobDataFromUUID(kId);
EXPECT_FALSE(blob_data_handle);
@@ -147,11 +148,11 @@ TEST(BlobStorageContextTest, MemoryUsage) {
EXPECT_EQ(10lu, context.memory_usage());
blob_data_handle.reset();
- RunEventLoopTillIdle();
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(10lu, context.memory_usage());
blob_data_handle2.reset();
- RunEventLoopTillIdle();
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(0lu, context.memory_usage());
}
@@ -190,7 +191,7 @@ TEST(BlobStorageContextTest, AddFinishedBlob) {
blob_data_handle.reset();
data2.reset();
- RunEventLoopTillIdle();
+ base::RunLoop().RunUntilIdle();
blob_data_handle = context.GetBlobDataFromUUID(kId1);
EXPECT_FALSE(blob_data_handle);
@@ -205,7 +206,7 @@ TEST(BlobStorageContextTest, AddFinishedBlob) {
scoped_ptr<BlobDataHandle> blob_data_handle3 =
context.AddFinishedBlob(&builder3);
blob_data_handle2.reset();
- RunEventLoopTillIdle();
+ base::RunLoop().RunUntilIdle();
blob_data_handle2 = context.GetBlobDataFromUUID(kId2);
EXPECT_FALSE(blob_data_handle2);
@@ -222,7 +223,43 @@ TEST(BlobStorageContextTest, AddFinishedBlob) {
blob_data_handle.reset();
blob_data_handle2.reset();
blob_data_handle3.reset();
- RunEventLoopTillIdle();
+ base::RunLoop().RunUntilIdle();
+}
+
+TEST(BlobStorageContextTest, AddFinishedBlob_LargeOffset) {
+ // A value which does not fit in a 4-byte data type. Used to confirm that
+ // large values are supported on 32-bit Chromium builds. Regression test for:
+ // crbug.com/458122.
+ const uint64_t kLargeSize = std::numeric_limits<uint64_t>::max();
+
+ const uint64_t kBlobLength = 5;
+ const std::string kId1("id1");
+ const std::string kId2("id2");
+ base::MessageLoop fake_io_message_loop;
+
+ BlobDataBuilder builder1(kId1);
+ builder1.AppendFileSystemFile(GURL(), 0, kLargeSize, base::Time::Now());
+
+ BlobDataBuilder builder2(kId2);
+ builder2.AppendBlob(kId1, kLargeSize - kBlobLength, kBlobLength);
+
+ BlobStorageContext context;
+ scoped_ptr<BlobDataHandle> blob_data_handle1 =
+ context.AddFinishedBlob(&builder1);
+ scoped_ptr<BlobDataHandle> blob_data_handle2 =
+ context.AddFinishedBlob(&builder2);
+
+ ASSERT_TRUE(blob_data_handle1);
+ ASSERT_TRUE(blob_data_handle2);
+ scoped_ptr<BlobDataSnapshot> data = blob_data_handle2->CreateSnapshot();
+ ASSERT_EQ(1u, data->items().size());
+ const scoped_refptr<BlobDataItem> item = data->items()[0];
+ EXPECT_EQ(kLargeSize - kBlobLength, item->offset());
+ EXPECT_EQ(kBlobLength, item->length());
+
+ blob_data_handle1.reset();
+ blob_data_handle2.reset();
+ base::RunLoop().RunUntilIdle();
}
TEST(BlobStorageContextTest, CompoundBlobs) {
@@ -276,7 +313,7 @@ TEST(BlobStorageContextTest, CompoundBlobs) {
EXPECT_EQ(*data, canonicalized_blob_data2);
blob_data_handle.reset();
- RunEventLoopTillIdle();
+ base::RunLoop().RunUntilIdle();
}
TEST(BlobStorageContextTest, PublicBlobUrls) {
@@ -297,7 +334,7 @@ TEST(BlobStorageContextTest, PublicBlobUrls) {
EXPECT_EQ(kId, blob_data_handle->uuid());
scoped_ptr<BlobDataSnapshot> data = blob_data_handle->CreateSnapshot();
blob_data_handle.reset();
- RunEventLoopTillIdle();
+ base::RunLoop().RunUntilIdle();
// The url registration should keep the blob alive even after
// explicit references are dropped.
@@ -305,7 +342,7 @@ TEST(BlobStorageContextTest, PublicBlobUrls) {
blob_data_handle = context.GetBlobDataFromPublicURL(kUrl);
EXPECT_TRUE(blob_data_handle);
blob_data_handle.reset();
- RunEventLoopTillIdle();
+ base::RunLoop().RunUntilIdle();
// Finally get rid of the url registration and the blob.
EXPECT_TRUE(host.RevokePublicBlobURL(kUrl));
« no previous file with comments | « no previous file | storage/browser/blob/blob_storage_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698