Index: chrome/browser/content_settings/permission_context_base.cc |
diff --git a/chrome/browser/content_settings/permission_context_base.cc b/chrome/browser/content_settings/permission_context_base.cc |
index b85f0a77c20f3dd2a6f8968da73dfd920c8c0f0d..f64592c45f7c3d4a0a21ebee38450434713dcaf3 100644 |
--- a/chrome/browser/content_settings/permission_context_base.cc |
+++ b/chrome/browser/content_settings/permission_context_base.cc |
@@ -23,13 +23,14 @@ PermissionContextBase::PermissionContextBase( |
const ContentSettingsType permission_type) |
: profile_(profile), |
permission_type_(permission_type), |
+ shutting_down_(false), |
weak_factory_(this) { |
permission_queue_controller_.reset( |
new PermissionQueueController(profile_, permission_type_)); |
} |
PermissionContextBase::~PermissionContextBase() { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
} |
void PermissionContextBase::RequestPermission( |
@@ -38,8 +39,10 @@ void PermissionContextBase::RequestPermission( |
const GURL& requesting_frame, |
bool user_gesture, |
const BrowserPermissionCallback& callback) { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
+ if (shutting_down_) |
+ return; |
DecidePermission(web_contents, |
id, |
requesting_frame.GetOrigin(), |
@@ -48,6 +51,27 @@ void PermissionContextBase::RequestPermission( |
callback); |
} |
+void PermissionContextBase::CancelPermissionRequest( |
+ content::WebContents* web_contents, |
+ const PermissionRequestID& id) { |
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
Bernhard Bauer
2014/08/13 21:05:08
Nit: DCHECK_CURRENTLY_ON?
|
+ if (shutting_down_) |
+ return; |
+ |
+ if (PermissionBubbleManager::Enabled()) { |
+ PermissionBubbleRequest* cancelling = |
+ pending_bubbles_.get(id.ToString()); |
+ if (cancelling != NULL && web_contents != NULL && |
+ PermissionBubbleManager::FromWebContents(web_contents) != NULL) { |
+ PermissionBubbleManager::FromWebContents(web_contents)-> |
+ CancelRequest(cancelling); |
+ } |
+ return; |
+ } |
+ |
+ GetQueueController()->CancelInfoBarRequest(id); |
+} |
+ |
void PermissionContextBase::DecidePermission( |
content::WebContents* web_contents, |
const PermissionRequestID& id, |
@@ -58,7 +82,8 @@ void PermissionContextBase::DecidePermission( |
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
ContentSetting content_setting = |
- profile_->GetHostContentSettingsMap()->GetContentSetting( |
+ profile_->GetHostContentSettingsMap() |
+ ->GetContentSettingAndMaybeUpdateLastUsage( |
requesting_origin, embedder_origin, permission_type_, std::string()); |
switch (content_setting) { |
case CONTENT_SETTING_BLOCK: |
@@ -183,3 +208,8 @@ void PermissionContextBase::UpdateContentSetting( |
std::string(), |
content_setting); |
} |
+ |
+void PermissionContextBase::Shutdown() { |
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ shutting_down_ = true; |
+} |