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

Unified Diff: ios/web/crw_browsing_data_store_unittest.mm

Issue 1154923003: Fixing an edge case in CRWBrowsingDataStore (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: y Created 5 years, 7 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 | « ios/web/crw_browsing_data_store.mm ('k') | ios/web/public/crw_browsing_data_store.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/web/crw_browsing_data_store_unittest.mm
diff --git a/ios/web/crw_browsing_data_store_unittest.mm b/ios/web/crw_browsing_data_store_unittest.mm
index f5466990cfb72e6ee6bcdf0598dc92bc2f4413eb..84e4f73e736535a8be2d3e528fda6214dccf1904 100644
--- a/ios/web/crw_browsing_data_store_unittest.mm
+++ b/ios/web/crw_browsing_data_store_unittest.mm
@@ -4,6 +4,7 @@
#import "ios/web/public/crw_browsing_data_store.h"
+#include "base/logging.h"
#import "base/mac/scoped_nsobject.h"
#include "base/memory/scoped_ptr.h"
#import "base/test/ios/wait_util.h"
@@ -14,6 +15,55 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
+// An observer to observe the |mode| key changes to a CRWBrowsingDataStore.
+// Used for testing purposes.
+@interface CRWTestBrowsingDataStoreObserver : NSObject
+// Designated init. |browsingDataStore| cannot be null.
+- (instancetype)initWithBrowsingDataStore:
+ (CRWBrowsingDataStore*)browsingDataStore NS_DESIGNATED_INITIALIZER;
+// The number of times that the mode of the underlying CRWBrowsingDataStore
+// changed.
+@property(nonatomic, assign) NSUInteger modeChangeCount;
+@end
+
+@implementation CRWTestBrowsingDataStoreObserver {
+ // The underlying CRWBrowsingDataStore.
+ __weak CRWBrowsingDataStore* _browsingDataStore;
+}
+
+@synthesize modeChangeCount = _modeChangeCount;
+
+- (instancetype)initWithBrowsingDataStore:
+ (CRWBrowsingDataStore*)browsingDataStore {
+ self = [super init];
+ if (self) {
+ DCHECK(browsingDataStore);
+ [browsingDataStore addObserver:self
+ forKeyPath:@"mode"
+ options:0
+ context:nil];
+ _browsingDataStore = browsingDataStore;
+ }
+ return self;
+}
+
+- (void)observeValueForKeyPath:(NSString*)keyPath
+ ofObject:(id)object
+ change:(NSDictionary*)change
+ context:(void*)context {
+ DCHECK([keyPath isEqual:@"mode"]);
+ DCHECK_EQ(_browsingDataStore, object);
+
+ ++self.modeChangeCount;
+}
+
+- (void)dealloc {
+ [_browsingDataStore removeObserver:self forKeyPath:@"mode"];
+ [super dealloc];
+}
+
+@end
+
namespace web {
namespace {
@@ -56,28 +106,33 @@ TEST_F(BrowsingDataStoreTest, InitialModeAndNoPendingOperations) {
// Tests that CRWBrowsingDataStore handles several consecutive calls to
// |makeActive| and |makeInactive| correctly.
TEST_F(BrowsingDataStoreTest, MakeActiveAndInactiveOperations) {
- ProceduralBlock makeActiveCallback = ^{
- ASSERT_TRUE([NSThread isMainThread]);
- CRWBrowsingDataStoreMode mode = [browsing_data_store_ mode];
- EXPECT_TRUE((mode == ACTIVE) || (mode == SYNCHRONIZING));
- };
- ProceduralBlock makeInactiveCallback = ^{
+ base::scoped_nsobject<CRWTestBrowsingDataStoreObserver> observer(
+ [[CRWTestBrowsingDataStoreObserver alloc]
+ initWithBrowsingDataStore:browsing_data_store_]);
+ EXPECT_EQ(0U, [observer modeChangeCount]);
+
+ id unsucessfullCallback = ^(BOOL success) {
ASSERT_TRUE([NSThread isMainThread]);
CRWBrowsingDataStoreMode mode = [browsing_data_store_ mode];
- EXPECT_TRUE((mode == INACTIVE) || (mode == SYNCHRONIZING));
+ EXPECT_FALSE(success);
+ EXPECT_EQ(SYNCHRONIZING, mode);
};
- [browsing_data_store_ makeActiveWithCompletionHandler:makeActiveCallback];
+ [browsing_data_store_ makeActiveWithCompletionHandler:unsucessfullCallback];
EXPECT_EQ(SYNCHRONIZING, [browsing_data_store_ mode]);
+ EXPECT_EQ(1U, [observer modeChangeCount]);
- [browsing_data_store_ makeInactiveWithCompletionHandler:makeInactiveCallback];
+ [browsing_data_store_ makeInactiveWithCompletionHandler:unsucessfullCallback];
EXPECT_EQ(SYNCHRONIZING, [browsing_data_store_ mode]);
- [browsing_data_store_ makeActiveWithCompletionHandler:makeActiveCallback];
+ [browsing_data_store_ makeActiveWithCompletionHandler:unsucessfullCallback];
EXPECT_EQ(SYNCHRONIZING, [browsing_data_store_ mode]);
__block BOOL block_was_called = NO;
- [browsing_data_store_ makeInactiveWithCompletionHandler:^{
- makeInactiveCallback();
+ [browsing_data_store_ makeInactiveWithCompletionHandler:^(BOOL success) {
+ ASSERT_TRUE([NSThread isMainThread]);
+ CRWBrowsingDataStoreMode mode = [browsing_data_store_ mode];
+ EXPECT_TRUE(success);
+ EXPECT_EQ(INACTIVE, mode);
block_was_called = YES;
}];
EXPECT_EQ(SYNCHRONIZING, [browsing_data_store_ mode]);
@@ -85,6 +140,9 @@ TEST_F(BrowsingDataStoreTest, MakeActiveAndInactiveOperations) {
base::test::ios::WaitUntilCondition(^bool{
return block_was_called;
});
+
+ EXPECT_EQ(INACTIVE, [browsing_data_store_ mode]);
+ EXPECT_EQ(2U, [observer modeChangeCount]);
}
// Tests that CRWBrowsingDataStore correctly handles |removeDataOfTypes:| call.
« no previous file with comments | « ios/web/crw_browsing_data_store.mm ('k') | ios/web/public/crw_browsing_data_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698