OLD | NEW |
---|---|
(Empty) | |
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 CHROME_BROWSER_ANDROID_SEARCH_GEOLOCATION_SEARCH_GEOLOCATION_SERVICE_H_ | |
6 #define CHROME_BROWSER_ANDROID_SEARCH_GEOLOCATION_SEARCH_GEOLOCATION_SERVICE_H_ | |
7 | |
8 #include "base/memory/singleton.h" | |
9 #include "components/content_settings/core/common/content_settings.h" | |
10 #include "components/keyed_service/content/browser_context_keyed_service_factory .h" | |
11 #include "components/keyed_service/core/keyed_service.h" | |
12 #include "components/search_engines/template_url_service_observer.h" | |
13 #include "url/gurl.h" | |
raymes
2017/01/09 05:47:26
nit: I don't think this is needed anymore
benwells
2017/01/09 21:02:22
Done.
| |
14 #include "url/origin.h" | |
15 | |
16 namespace content{ | |
17 class BrowserContext; | |
18 } | |
19 | |
20 namespace user_prefs { | |
21 class PrefRegistrySyncable; | |
22 } | |
23 | |
24 class HostContentSettingsMap; | |
25 class PrefService; | |
26 class Profile; | |
27 class TemplateURLService; | |
28 | |
29 // Helper class to manage the DSE Geolocation setting. It keeps the setting | |
30 // valid by watching change to the CCTLD and DSE, and also provides logic for | |
31 // whether the setting should be used and it's current value. | |
raymes
2017/01/09 05:47:26
nit: not sure if it's important to explain what CC
benwells
2017/01/09 21:02:22
Done.
| |
32 class SearchGeolocationService | |
33 : public TemplateURLServiceObserver, | |
34 public KeyedService { | |
35 public: | |
36 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); | |
37 | |
38 explicit SearchGeolocationService(Profile* profile); | |
39 | |
40 // Returns whether the DSE geolocation setting is applicable for geolocation | |
41 // requests for the given origin. | |
raymes
2017/01/09 05:47:26
nit: might want to clarify that this is the top le
benwells
2017/01/09 21:02:22
Done.
| |
42 bool UseDSEGeolocationSetting(const url::Origin& requesting_origin); | |
43 | |
44 // Returns the DSE geolocation setting, after applying any updates needed to | |
45 // make it valid. | |
46 bool GetDSEGeolocationSetting(); | |
47 | |
48 // Changes the DSE geolocation setting. | |
49 void SetDSEGeolocationSetting(bool setting); | |
50 | |
51 // KeyedService: | |
52 void Shutdown() override; | |
53 | |
54 // Factory implementation will not create a service in incognito. | |
55 class Factory : public BrowserContextKeyedServiceFactory { | |
raymes
2017/01/09 05:47:26
nit: I think inner classes tend to go before the m
benwells
2017/01/09 21:02:22
Done.
| |
56 public: | |
57 static SearchGeolocationService* GetForBrowserContext( | |
58 content::BrowserContext* context); | |
59 | |
60 static Factory* GetInstance(); | |
61 private: | |
62 friend struct base::DefaultSingletonTraits<Factory>; | |
63 | |
64 Factory(); | |
65 ~Factory() override; | |
66 | |
67 // BrowserContextKeyedServiceFactory | |
68 bool ServiceIsCreatedWithBrowserContext() const override; | |
69 KeyedService* BuildServiceInstanceFor( | |
70 content::BrowserContext* profile) const override; | |
71 }; | |
72 | |
73 private: | |
74 struct PrefValue; | |
75 | |
76 ~SearchGeolocationService() override; | |
77 | |
78 // TemplateURLServiceObserver | |
79 // When the DSE CCTLD changes (either by changing their DSE or by changing | |
80 // their CCTLD, and their DSE supports geolocation: | |
81 // * If the DSE CCTLD origin permission is BLOCK, but the DSE geolocation | |
82 // setting is on, change the DSE geolocation setting to off | |
83 // * If the DSE CCTLD origin permission is ALLOW, but the DSE geolocation | |
84 // setting is off, reset the DSE CCTLD origin permission to ASK. | |
85 // Also, if the previous DSE did not support geolocation, and the new one | |
86 // does, and the geolocation setting is on, reset whether the DSE geolocation | |
87 // disclosure has been shown. | |
88 void OnTemplateURLServiceChanged() override; | |
89 | |
90 // Initialize the DSE geolocation setting if it hasn't already been | |
91 // initialized. Also, if it hasn't been initialized, reset whether the DSE | |
92 // geolocation disclosure has been shown to ensure user who may have seen it | |
93 // on earlier versions (due to Finch experiments) see it again. | |
94 void InitializeDSEGeolocationSettingIfNeeded(); | |
95 | |
96 // Check that the DSE geolocation setting is valid with respect to the content | |
97 // setting. The rules of vaidity are: | |
98 // * If the content setting is BLOCK, the DSE geolocation setting must | |
99 // be false. | |
100 // * If the content setting is ALLOW, the DSE geolocation setting must be | |
101 // true. | |
102 // * If the content setting is ASK, the DSE geolocation setting can be true or | |
103 // false. | |
104 // One way the setting could become invalid is if the feature enabling the | |
105 // setting was disabled (via Finch or flags), content settings were changed, | |
106 // and the feature enabled again. | |
107 // Another way is if the setting was changed while enterprise policy is in | |
raymes
2017/01/09 05:47:27
nit: fill the previous line to 80chars
benwells
2017/01/09 21:02:22
Done. I also updated the text a bit.
| |
108 // effect. | |
109 void EnsureDSEGeolocationSettingIsValid(); | |
110 | |
111 // Returns true if the current DSE is Google. | |
raymes
2017/01/09 05:47:26
nit: might want to mention that Google is currentl
benwells
2017/01/09 21:02:22
Done.
| |
112 bool IsGoogleSearchEngine(); | |
113 | |
114 // Returns the origin of the current CCTLD of the default search engine. If | |
115 // the default search engine is not Google, will return a unique Origin. | |
116 url::Origin GetDSECCTLD(); | |
117 | |
118 PrefValue GetDSEGeolocationPref(); | |
119 void SetDSEGeolocationPref(const PrefValue& pref); | |
120 | |
121 ContentSetting GetCurrentContentSetting(); | |
raymes
2017/01/09 05:47:27
nit: might want to clairfy that these apply to the
benwells
2017/01/09 21:02:22
Done.
| |
122 void ResetContentSetting(); | |
123 | |
124 // Whether the feature/experiment setup is enabling the consistent search | |
125 // geolocation system. | |
126 bool UseConsistentSearchGeolocation(); | |
127 | |
128 Profile* profile_; | |
129 PrefService* pref_service_; | |
130 HostContentSettingsMap* host_content_settings_map_; | |
131 TemplateURLService* template_url_service_; | |
132 }; | |
133 | |
134 #endif // CHROME_BROWSER_ANDROID_SEARCH_GEOLOCATION_SEARCH_GEOLOCATION_SERVICE_ H_ | |
OLD | NEW |