blob: 2a588972e0fc19c90ced1447c4d053a5375f0716 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/web_view/test/observer.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@implementation Observer
@synthesize keyPath = _keyPath;
@synthesize lastValue = _lastValue;
@synthesize object = _object;
@synthesize previousValue = _previousValue;
- (void)setObservedObject:(NSObject*)object keyPath:(NSString*)keyPath {
[_object removeObserver:self forKeyPath:_keyPath];
_lastValue = nil;
_previousValue = nil;
_keyPath = [keyPath copy];
_object = object;
[_object addObserver:self
forKeyPath:_keyPath
options:NSKeyValueObservingOptionNew
context:nil];
}
- (void)observeValueForKeyPath:(NSString*)keyPath
ofObject:(id)object
change:(NSDictionary<NSKeyValueChangeKey, id>*)change
context:(void*)context {
if (![object isEqual:_object] || ![keyPath isEqualToString:_keyPath]) {
// Ignore extraneous call from previous |_object| or |_keyPath|.
return;
}
_previousValue = _lastValue;
_lastValue = change[NSKeyValueChangeNewKey];
}
- (void)dealloc {
[_object removeObserver:self forKeyPath:_keyPath];
}
@end