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

Side by Side Diff: chrome/browser/metrics/variations/resource_request_allowed_notifier.h

Issue 10917120: Activate the VariationsService for ChromeOS and ensure that it does not ping the server until the E… (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Comments addressed. Created 8 years, 3 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 (c) 2012 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_METRICS_VARIATIONS_RESOURCE_REQUEST_ALLOWED_NOTIFIER_H_
6 #define CHROME_BROWSER_METRICS_VARIATIONS_RESOURCE_REQUEST_ALLOWED_NOTIFIER_H_
7
8 #include "base/observer_list.h"
9 #include "net/base/network_change_notifier.h"
10
11 #if defined(OS_CHROMEOS)
12 #include "content/public/browser/notification_observer.h"
13 #include "content/public/browser/notification_registrar.h"
14 #endif
15
16 #if defined(OS_CHROMEOS)
17 namespace chromeos {
18 class WizardController;
Alexei Svitkine (slow) 2012/09/20 21:39:03 Is this needed? I don't see the header using it.
SteveT 2012/09/21 15:16:17 Removed now.
19 }
20 #endif
21
22 // This class informs an interested observer when resource requests over the
23 // network are permitted.
24 //
25 // Currently, the criteria for allowing resource requests include:
26 // 1. The network is currently available.
27 // 2. The EULA was accepted by the user (ChromeOS only).
28 //
29 // Interested services should add themselves as an observer of
30 // ResourceRequestAllowedNotifier and check ResourceRequestsAllowed() to see if
31 // requests are permitted. If it returns true, they can go ahead and make their
32 // request. If it returns false, ResourceRequestAllowedNotifier will notify the
33 // service when the criteria is met.
34 //
35 // If ResourceRequestsAllowed returns true the first time,
36 // ResourceRequestAllowedNotifier will not notify the service in the future.
37 //
38 // Note that this class handles the criteria state for a single service, so
39 // services should keep their own instance of this class rather than sharing a
40 // global instance.
41 class ResourceRequestAllowedNotifier :
42 #if defined(OS_CHROMEOS)
43 public content::NotificationObserver,
44 #endif
45 public net::NetworkChangeNotifier::ConnectionTypeObserver {
46 public:
47 // Observes resource request allowed state changes.
48 class Observer {
49 public:
50 virtual void OnResourceRequestsAllowed() = 0;
51 };
52
53 // Note that the constructor has some logic to register for notifications from
54 // the WizardController if the EULA was not accepted at startup (ChromeOS
Alexei Svitkine (slow) 2012/09/20 21:39:03 Nit: Prefix WizardController with its namespace in
SteveT 2012/09/21 15:16:17 Done.
55 // only).
56 ResourceRequestAllowedNotifier();
57 virtual ~ResourceRequestAllowedNotifier();
58
59 // Sets |observer| as the service to be notified by this instance. |observer|
60 // may not be NULL. This is to be called immediately after construction of
61 // an instance of ResourceRequestAllowedNotifier to pass it the interested
62 // service.
63 void Init(Observer* observer);
64
65 // Returns true iff all resource request criteria are met. If not, this call
66 // will set some flags so it knows to notify the observer if the criteria
67 // changes. This is virtual so it can be overriden for tests.
68 virtual bool ResourceRequestsAllowed();
69
70 void SetWasWaitingForNetworkForTesting(bool waiting);
71 #if defined(OS_CHROMEOS)
72 void SetWasWaitingForEulaForTesting(bool waiting);
73 #endif
74
75 protected:
76 // Notifies observers if all criteria needed for resource requests are met.
77 // This is protected so it can be called from subclasses for testing.
78 void MaybeNotifyObservers();
79
80 #if defined(OS_CHROMEOS)
81 // Returns true iff the EULA has been accepted by the user.
82 // This is virtual so it can be overriden by test classes to avoid making them
83 // aware of the ChromeOS details. This is protected so it call be overriden in
84 // subclasses for testing.
85 virtual bool IsEulaAccepted();
86 #endif
87
88 private:
89 // net::NetworkChangeNotifier::ConnectionTypeObserver overrides:
90 virtual void OnConnectionTypeChanged(
91 net::NetworkChangeNotifier::ConnectionType type) OVERRIDE;
92
93 #if defined(OS_CHROMEOS)
94 // content::NotificationObserver overrides:
95 virtual void Observe(int type,
96 const content::NotificationSource& source,
97 const content::NotificationDetails& details) OVERRIDE;
98
99 content::NotificationRegistrar registrar_;
100
101 // Tracks EULA acceptance criteria.
102 bool was_waiting_for_user_to_accept_eula_;
103 #endif
104
105 // Tracks network connectivity criteria.
106 bool was_waiting_for_network_;
107
108 // Observing service interested in request permissions.
109 Observer* observer_;
110
111 DISALLOW_COPY_AND_ASSIGN(ResourceRequestAllowedNotifier);
112 };
113
114 #endif // CHROME_BROWSER_METRICS_VARIATIONS_RESOURCE_REQUEST_ALLOWED_NOTIFIER_H _
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698