1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef IOS_CHROME_BROWSER_CHROME_BROWSER_PROVIDER_OBSERVER_BRIDGE_H_
6 #define IOS_CHROME_BROWSER_CHROME_BROWSER_PROVIDER_OBSERVER_BRIDGE_H_
7 
8 #import <Foundation/Foundation.h>
9 
10 #include "base/macros.h"
11 #include "base/scoped_observer.h"
12 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
13 
14 // Objective-C protocol mirroring ChromeBrowserProvider::Observer.
15 @protocol ChromeBrowserProviderObserver<NSObject>
16 @optional
17 // Called when a new ChromeIdentityService has been installed.
18 - (void)chromeIdentityServiceDidChange:
19     (ios::ChromeIdentityService*)newIdentityService;
20 // Called when the ChromeBrowserProvider will be destroyed.
21 - (void)chromeBrowserProviderWillBeDestroyed;
22 @end
23 
24 // Simple observer bridge that forwards all events to its delegate observer.
25 class ChromeBrowserProviderObserverBridge
26     : public ios::ChromeBrowserProvider::Observer {
27  public:
28   explicit ChromeBrowserProviderObserverBridge(
29       id<ChromeBrowserProviderObserver> observer);
30   ~ChromeBrowserProviderObserverBridge() override;
31 
32  private:
33   // ios::ChromeBrowserProvider::Observer implementation.
34   void OnChromeIdentityServiceDidChange(
35       ios::ChromeIdentityService* new_identity_service) override;
36   void OnChromeBrowserProviderWillBeDestroyed() override;
37 
38   __weak id<ChromeBrowserProviderObserver> observer_;
39   ScopedObserver<ios::ChromeBrowserProvider,
40                  ios::ChromeBrowserProvider::Observer>
41       scoped_observer_{this};
42 
43   DISALLOW_COPY_AND_ASSIGN(ChromeBrowserProviderObserverBridge);
44 };
45 
46 #endif  // IOS_CHROME_BROWSER_CHROME_BROWSER_PROVIDER_OBSERVER_BRIDGE_H_
47