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

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
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 647399753da15e7166b0cdbc98ab2d9904702c5d..0472c2f650d01f1ef5b234f4a8509c15f9280d0f 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,58 @@
#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 numberOfTimesModeValueChanged;
+@end
+
+@implementation CRWTestBrowsingDataStoreObserver {
+ // The underlying CRWBrowsingDataStore.
+ __weak CRWBrowsingDataStore* _browsingDataStore;
+ // The last observer mode of the |_browsingDataStore;|
+ CRWBrowsingDataStoreMode _lastObservedMode;
+}
+
+@synthesize numberOfTimesModeValueChanged = _numberOfTimesModeValueChanged;
Eugene But (OOO till 7-30) 2015/05/29 21:14:26 s/numberOfTimesModeValueChanged/modeChangeCount
+
+- (instancetype)initWithBrowsingDataStore:
+ (CRWBrowsingDataStore*)browsingDataStore {
+ self = [super init];
+ if (self) {
+ DCHECK(browsingDataStore);
+ [browsingDataStore addObserver:self
+ forKeyPath:@"mode"
+ options:0
+ context:nil];
+ _browsingDataStore = browsingDataStore;
+ _lastObservedMode = [_browsingDataStore mode];
Eugene But (OOO till 7-30) 2015/05/29 21:14:26 Is this used anywhere else?
shreyasv1 2015/05/29 22:22:57 Good catch. Removed.
+ }
+ return self;
+}
+
+- (void)observeValueForKeyPath:(NSString*)keyPath
+ ofObject:(id)object
+ change:(NSDictionary*)change
+ context:(void*)context {
+ DCHECK([keyPath isEqual:@"mode"]);
+ DCHECK_EQ(_browsingDataStore, object);
+
+ ++self.numberOfTimesModeValueChanged;
+}
+
+- (void)dealloc {
+ [_browsingDataStore removeObserver:self forKeyPath:@"mode"];
+ [super dealloc];
+}
+
+@end
+
namespace web {
namespace {
@@ -56,28 +109,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 numberOfTimesModeValueChanged]);
+
+ 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 numberOfTimesModeValueChanged]);
- [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 +143,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 numberOfTimesModeValueChanged]);
}
// Tests that CRWBrowsingDataStore correctly handles |removeDataOfTypes:| call.

Powered by Google App Engine
This is Rietveld 408576698