OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/content_settings/permission_context_base.h" | 5 #include "chrome/browser/content_settings/permission_context_base.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "chrome/browser/content_settings/permission_bubble_request_impl.h" | 9 #include "chrome/browser/content_settings/permission_bubble_request_impl.h" |
10 #include "chrome/browser/content_settings/permission_context_uma_util.h" | 10 #include "chrome/browser/content_settings/permission_context_uma_util.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
92 const BrowserPermissionCallback& callback) { | 92 const BrowserPermissionCallback& callback) { |
93 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 93 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
94 | 94 |
95 if (!requesting_origin.is_valid() || !embedding_origin.is_valid()) { | 95 if (!requesting_origin.is_valid() || !embedding_origin.is_valid()) { |
96 DVLOG(1) | 96 DVLOG(1) |
97 << "Attempt to use " << content_settings::GetTypeName(permission_type_) | 97 << "Attempt to use " << content_settings::GetTypeName(permission_type_) |
98 << " from an invalid URL: " << requesting_origin | 98 << " from an invalid URL: " << requesting_origin |
99 << "," << embedding_origin | 99 << "," << embedding_origin |
100 << " (" << content_settings::GetTypeName(permission_type_) | 100 << " (" << content_settings::GetTypeName(permission_type_) |
101 << " is not supported in popups)"; | 101 << " is not supported in popups)"; |
102 NotifyPermissionSet(id, requesting_origin, embedding_origin, | 102 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, |
103 callback, false /* persist */, false /* granted */); | 103 false /* persist */, CONTENT_SETTING_BLOCK); |
104 return; | 104 return; |
105 } | 105 } |
106 | 106 |
107 ContentSetting content_setting = | 107 ContentSetting content_setting = |
108 profile_->GetHostContentSettingsMap() | 108 profile_->GetHostContentSettingsMap() |
109 ->GetContentSettingAndMaybeUpdateLastUsage( | 109 ->GetContentSettingAndMaybeUpdateLastUsage( |
110 requesting_origin, embedding_origin, permission_type_, | 110 requesting_origin, embedding_origin, permission_type_, |
111 std::string()); | 111 std::string()); |
112 | 112 |
113 switch (content_setting) { | 113 if (content_setting == CONTENT_SETTING_ALLOW || |
114 case CONTENT_SETTING_BLOCK: | 114 content_setting == CONTENT_SETTING_BLOCK) { |
115 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, | 115 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, |
116 false /* persist */, false /* granted */); | 116 false /* persist */, content_setting); |
117 return; | 117 return; |
118 case CONTENT_SETTING_ALLOW: | |
119 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, | |
120 false /* persist */, true /* granted */); | |
121 return; | |
122 default: | |
123 break; | |
124 } | 118 } |
125 | 119 |
126 PermissionContextUmaUtil::PermissionRequested( | 120 PermissionContextUmaUtil::PermissionRequested( |
127 permission_type_, requesting_origin); | 121 permission_type_, requesting_origin); |
128 | 122 |
129 if (PermissionBubbleManager::Enabled()) { | 123 if (PermissionBubbleManager::Enabled()) { |
130 if (pending_bubbles_.get(id.ToString()) != NULL) | 124 if (pending_bubbles_.get(id.ToString()) != NULL) |
131 return; | 125 return; |
132 PermissionBubbleManager* bubble_manager = | 126 PermissionBubbleManager* bubble_manager = |
133 PermissionBubbleManager::FromWebContents(web_contents); | 127 PermissionBubbleManager::FromWebContents(web_contents); |
(...skipping 27 matching lines...) Expand all Loading... | |
161 // permission | 155 // permission |
162 false)); | 156 false)); |
163 } | 157 } |
164 | 158 |
165 void PermissionContextBase::PermissionDecided( | 159 void PermissionContextBase::PermissionDecided( |
166 const PermissionRequestID& id, | 160 const PermissionRequestID& id, |
167 const GURL& requesting_origin, | 161 const GURL& requesting_origin, |
168 const GURL& embedding_origin, | 162 const GURL& embedding_origin, |
169 const BrowserPermissionCallback& callback, | 163 const BrowserPermissionCallback& callback, |
170 bool persist, | 164 bool persist, |
171 bool allowed) { | 165 ContentSetting content_setting) { |
172 // Infobar persistance and its related UMA is tracked on the infobar | 166 // Infobar persistance and its related UMA is tracked on the infobar |
173 // controller directly. | 167 // controller directly. |
174 if (PermissionBubbleManager::Enabled()) { | 168 if (PermissionBubbleManager::Enabled()) { |
175 if (persist) { | 169 if (persist) { |
176 if (allowed) | 170 DCHECK(content_setting == CONTENT_SETTING_ALLOW || |
171 content_setting == CONTENT_SETTING_BLOCK); | |
172 if (CONTENT_SETTING_ALLOW) | |
dgrogan
2015/05/14 03:48:28
strictly by code inspection, but won't this block
Miguel Garcia
2015/05/14 11:10:53
You are totally right I uploaded a fix in https://
| |
177 PermissionContextUmaUtil::PermissionGranted(permission_type_, | 173 PermissionContextUmaUtil::PermissionGranted(permission_type_, |
178 requesting_origin); | 174 requesting_origin); |
179 else | 175 else |
180 PermissionContextUmaUtil::PermissionDenied(permission_type_, | 176 PermissionContextUmaUtil::PermissionDenied(permission_type_, |
181 requesting_origin); | 177 requesting_origin); |
182 } else { | 178 } else { |
179 DCHECK_EQ(content_setting, CONTENT_SETTING_DEFAULT); | |
183 PermissionContextUmaUtil::PermissionDismissed(permission_type_, | 180 PermissionContextUmaUtil::PermissionDismissed(permission_type_, |
184 requesting_origin); | 181 requesting_origin); |
185 } | 182 } |
186 } | 183 } |
187 | 184 |
188 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, | 185 NotifyPermissionSet(id, requesting_origin, embedding_origin, callback, |
189 persist, allowed); | 186 persist, content_setting); |
190 } | 187 } |
191 | 188 |
192 PermissionQueueController* PermissionContextBase::GetQueueController() { | 189 PermissionQueueController* PermissionContextBase::GetQueueController() { |
193 return permission_queue_controller_.get(); | 190 return permission_queue_controller_.get(); |
194 } | 191 } |
195 | 192 |
196 Profile* PermissionContextBase::profile() const { | 193 Profile* PermissionContextBase::profile() const { |
197 return profile_; | 194 return profile_; |
198 } | 195 } |
199 | 196 |
200 void PermissionContextBase::NotifyPermissionSet( | 197 void PermissionContextBase::NotifyPermissionSet( |
201 const PermissionRequestID& id, | 198 const PermissionRequestID& id, |
202 const GURL& requesting_origin, | 199 const GURL& requesting_origin, |
203 const GURL& embedding_origin, | 200 const GURL& embedding_origin, |
204 const BrowserPermissionCallback& callback, | 201 const BrowserPermissionCallback& callback, |
205 bool persist, | 202 bool persist, |
206 bool allowed) { | 203 ContentSetting content_setting) { |
207 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 204 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
205 | |
208 if (persist) | 206 if (persist) |
209 UpdateContentSetting(requesting_origin, embedding_origin, allowed); | 207 UpdateContentSetting(requesting_origin, embedding_origin, content_setting); |
210 | 208 |
211 UpdateTabContext(id, requesting_origin, allowed); | 209 UpdateTabContext(id, requesting_origin, |
212 callback.Run(allowed); | 210 content_setting == CONTENT_SETTING_ALLOW); |
211 | |
212 if (content_setting == CONTENT_SETTING_DEFAULT) { | |
213 content_setting = | |
214 profile_->GetHostContentSettingsMap()->GetDefaultContentSetting( | |
215 permission_type_, nullptr); | |
216 } | |
217 | |
218 DCHECK_NE(content_setting, CONTENT_SETTING_DEFAULT); | |
219 callback.Run(content_setting); | |
213 } | 220 } |
214 | 221 |
215 void PermissionContextBase::CleanUpBubble(const PermissionRequestID& id) { | 222 void PermissionContextBase::CleanUpBubble(const PermissionRequestID& id) { |
216 size_t success = pending_bubbles_.erase(id.ToString()); | 223 size_t success = pending_bubbles_.erase(id.ToString()); |
217 DCHECK(success == 1) << "Missing request " << id.ToString(); | 224 DCHECK(success == 1) << "Missing request " << id.ToString(); |
218 } | 225 } |
219 | 226 |
220 void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, | 227 void PermissionContextBase::UpdateContentSetting( |
221 const GURL& embedding_origin, | 228 const GURL& requesting_origin, |
222 bool allowed) { | 229 const GURL& embedding_origin, |
230 ContentSetting content_setting) { | |
223 DCHECK_EQ(requesting_origin, requesting_origin.GetOrigin()); | 231 DCHECK_EQ(requesting_origin, requesting_origin.GetOrigin()); |
224 DCHECK_EQ(embedding_origin, embedding_origin.GetOrigin()); | 232 DCHECK_EQ(embedding_origin, embedding_origin.GetOrigin()); |
225 ContentSetting content_setting = | 233 DCHECK(content_setting == CONTENT_SETTING_ALLOW || |
226 allowed ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK; | 234 content_setting == CONTENT_SETTING_BLOCK); |
235 | |
227 profile_->GetHostContentSettingsMap()->SetContentSetting( | 236 profile_->GetHostContentSettingsMap()->SetContentSetting( |
228 ContentSettingsPattern::FromURLNoWildcard(requesting_origin), | 237 ContentSettingsPattern::FromURLNoWildcard(requesting_origin), |
229 ContentSettingsPattern::FromURLNoWildcard(embedding_origin), | 238 ContentSettingsPattern::FromURLNoWildcard(embedding_origin), |
230 permission_type_, std::string(), content_setting); | 239 permission_type_, std::string(), content_setting); |
231 } | 240 } |
OLD | NEW |