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

Side by Side Diff: ios/chrome/browser/device_sharing/device_sharing_manager.mm

Issue 2484703003: [ios] Adds code to support the iOS Handoff feature. (Closed)
Patch Set: Fix GN. Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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 #include "ios/chrome/browser/device_sharing/device_sharing_manager.h"
6
7 #include <memory>
8
9 #include "base/mac/scoped_nsobject.h"
10 #import "components/handoff/handoff_manager.h"
11 #include "components/prefs/pref_change_registrar.h"
12 #include "components/prefs/pref_service.h"
13 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
14 #include "ios/chrome/browser/pref_names.h"
15 #include "ios/chrome/browser/prefs/pref_observer_bridge.h"
16 #include "url/gurl.h"
17
18 @interface DeviceSharingManager ()<PrefObserverDelegate> {
19 ios::ChromeBrowserState* _browserState; // weak
20
21 // Bridge to listen to pref changes to the active browser state.
22 std::unique_ptr<PrefObserverBridge> _browserStatePrefObserverBridge;
23
24 // Registrar for pref change notifications to the active browser state.
25 std::unique_ptr<PrefChangeRegistrar> _browserStatePrefChangeRegistrar;
26
27 // Responsible for maintaining all state related to the Handoff feature.
28 base::scoped_nsobject<HandoffManager> _handoffManager;
29 }
30
31 // If handoff is enabled for the active browser state, then this method ensures
32 // that a handoff manager is active. Destroys the handoff manager otherwise.
33 - (void)updateHandoffManager;
34
35 // Returns an auto-released instance of |HandoffManager|. Factory method
36 // required for unit testing.
37 + (HandoffManager*)createHandoffManager;
38
39 @end
40
41 @implementation DeviceSharingManager
42
43 - (void)updateBrowserState:(ios::ChromeBrowserState*)state {
44 DCHECK(!state || !state->IsOffTheRecord());
45 if (_browserState == state) {
46 return;
47 }
48
49 _browserState = state;
50 if (!_browserState) {
51 _browserStatePrefObserverBridge.reset();
52 _browserStatePrefChangeRegistrar.reset();
53 } else {
54 // Add a listener to changes to the preferences related to device sharing.
55 _browserStatePrefChangeRegistrar.reset(new PrefChangeRegistrar);
56 _browserStatePrefChangeRegistrar->Init(_browserState->GetPrefs());
57 _browserStatePrefObserverBridge.reset(new PrefObserverBridge(self));
58 _browserStatePrefObserverBridge->ObserveChangesForPreference(
59 prefs::kIosHandoffToOtherDevices,
60 _browserStatePrefChangeRegistrar.get());
61 }
62 [self updateHandoffManager];
63 [self updateActiveURL:GURL()];
64 }
65
66 - (void)updateActiveURL:(const GURL&)activeURL {
67 [_handoffManager updateActiveURL:activeURL];
68 }
69
70 - (void)updateHandoffManager {
71 BOOL handoffEnabled =
72 _browserState &&
73 _browserState->GetPrefs()->GetBoolean(prefs::kIosHandoffToOtherDevices);
74 if (!handoffEnabled) {
75 _handoffManager.reset();
76 return;
77 }
78
79 if (!_handoffManager)
80 _handoffManager.reset([[[self class] createHandoffManager] retain]);
81 }
82
83 + (HandoffManager*)createHandoffManager {
84 return [[[HandoffManager alloc] init] autorelease];
85 }
86
87 #pragma mark - PrefObserverDelegate
88
89 - (void)onPreferenceChanged:(const std::string&)preferenceName {
90 if (preferenceName == prefs::kIosHandoffToOtherDevices) {
91 [self updateHandoffManager];
92 }
93 // TODO(msarda): Handle nearby sharing pref changes.
erikchen 2016/11/08 18:13:55 msarda is getting rid of this downstream: https://
rohitrao (ping after 24h) 2016/11/08 19:57:35 Done.
94 }
95
96 @end
97
98 @implementation DeviceSharingManager (TestingOnly)
99
100 - (HandoffManager*)handoffManager {
101 return _handoffManager.get();
102 }
103
104 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698