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

Side by Side Diff: chrome/browser/local_discovery/privet_notifications.h

Issue 1553333002: Move cloud print specific files out of local_discovery (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@moveprn
Patch Set: Created 4 years, 11 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 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 CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_NOTIFICATIONS_H_
6 #define CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_NOTIFICATIONS_H_
7
8 #include <map>
9 #include <string>
10
11 #include "base/prefs/pref_member.h"
12 #include "chrome/browser/local_discovery/privet_device_lister.h"
13 #include "chrome/browser/local_discovery/privet_http.h"
14 #include "chrome/browser/notifications/notification_delegate.h"
15 #include "components/keyed_service/core/keyed_service.h"
16
17 class NotificationUIManager;
18
19 namespace content {
20 class BrowserContext;
21 } // namespace content
22
23 namespace local_discovery {
24
25 class ServiceDiscoverySharedClient;
26 class PrivetDeviceLister;
27 class PrivetHTTPAsynchronousFactory;
28 class PrivetHTTPResolution;
29 struct DeviceDescription;
30
31 #if defined(ENABLE_MDNS)
32 class PrivetTrafficDetector;
33 #endif // ENABLE_MDNS
34
35 // Contains logic related to notifications not tied actually displaying them.
36 class PrivetNotificationsListener {
37 public:
38 class Delegate {
39 public:
40 virtual ~Delegate() {}
41
42 // Notify user of the existence of device |device_name|.
43 virtual void PrivetNotify(int devices_active, bool added) = 0;
44
45 // Remove the noitification for |device_name| if it still exists.
46 virtual void PrivetRemoveNotification() = 0;
47 };
48
49 PrivetNotificationsListener(
50 scoped_ptr<PrivetHTTPAsynchronousFactory> privet_http_factory,
51 Delegate* delegate);
52 virtual ~PrivetNotificationsListener();
53
54 // These two methods are akin to those of PrivetDeviceLister::Delegate. The
55 // user of PrivetNotificationListener should create a PrivetDeviceLister and
56 // forward device notifications to the PrivetNotificationLister.
57 void DeviceChanged(bool added,
58 const std::string& name,
59 const DeviceDescription& description);
60 void DeviceRemoved(const std::string& name);
61 virtual void DeviceCacheFlushed();
62
63 private:
64 struct DeviceContext {
65 DeviceContext();
66 ~DeviceContext();
67
68 bool notification_may_be_active;
69 bool registered;
70 scoped_ptr<PrivetJSONOperation> info_operation;
71 scoped_ptr<PrivetHTTPResolution> privet_http_resolution;
72 scoped_ptr<PrivetHTTPClient> privet_http;
73 };
74
75 typedef std::map<std::string, linked_ptr<DeviceContext> > DeviceContextMap;
76
77 void CreateInfoOperation(scoped_ptr<PrivetHTTPClient> http_client);
78 void OnPrivetInfoDone(DeviceContext* device,
79 const base::DictionaryValue* json_value);
80
81
82 void NotifyDeviceRemoved();
83
84 Delegate* delegate_;
85 scoped_ptr<PrivetDeviceLister> device_lister_;
86 scoped_ptr<PrivetHTTPAsynchronousFactory> privet_http_factory_;
87 DeviceContextMap devices_seen_;
88 int devices_active_;
89 };
90
91 class PrivetNotificationService
92 : public KeyedService,
93 public PrivetDeviceLister::Delegate,
94 public PrivetNotificationsListener::Delegate,
95 public base::SupportsWeakPtr<PrivetNotificationService> {
96 public:
97 explicit PrivetNotificationService(content::BrowserContext* profile);
98 ~PrivetNotificationService() override;
99
100 // PrivetDeviceLister::Delegate implementation:
101 void DeviceChanged(bool added,
102 const std::string& name,
103 const DeviceDescription& description) override;
104 void DeviceRemoved(const std::string& name) override;
105
106 // PrivetNotificationListener::Delegate implementation:
107 void PrivetNotify(int devices_active, bool added) override;
108
109 void PrivetRemoveNotification() override;
110 void DeviceCacheFlushed() override;
111
112 static bool IsEnabled();
113 static bool IsForced();
114
115 private:
116 void Start();
117 void OnNotificationsEnabledChanged();
118 void StartLister();
119
120 content::BrowserContext* profile_;
121 scoped_ptr<PrivetDeviceLister> device_lister_;
122 scoped_refptr<ServiceDiscoverySharedClient> service_discovery_client_;
123 scoped_ptr<PrivetNotificationsListener> privet_notifications_listener_;
124 BooleanPrefMember enable_privet_notification_member_;
125
126 #if defined(ENABLE_MDNS)
127 scoped_refptr<PrivetTrafficDetector> traffic_detector_;
128 #endif // ENABLE_MDNS
129 };
130
131 class PrivetNotificationDelegate : public NotificationDelegate {
132 public:
133 explicit PrivetNotificationDelegate(content::BrowserContext* profile);
134
135 // NotificationDelegate implementation.
136 std::string id() const override;
137 void ButtonClick(int button_index) override;
138
139 private:
140 void OpenTab(const GURL& url);
141 void DisableNotifications();
142
143 ~PrivetNotificationDelegate() override;
144
145 content::BrowserContext* profile_;
146 };
147
148 } // namespace local_discovery
149
150 #endif // CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_NOTIFICATIONS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698