| Index: chrome/browser/content_settings/permission_context_base.h | 
| diff --git a/chrome/browser/content_settings/permission_context_base.h b/chrome/browser/content_settings/permission_context_base.h | 
| index e72912f00d44ea209346564590cf069a6bacef18..ae22dbee096675019eb3483bca61113aba5a6674 100644 | 
| --- a/chrome/browser/content_settings/permission_context_base.h | 
| +++ b/chrome/browser/content_settings/permission_context_base.h | 
| @@ -63,6 +63,11 @@ class PermissionContextBase : public KeyedService { | 
| bool user_gesture, | 
| const BrowserPermissionCallback& callback); | 
|  | 
| +  // Withdraw an existing permission request, no op if the permission request | 
| +  // was already cancelled by some other means. | 
| +  virtual void CancelPermissionRequest(content::WebContents* web_contents, | 
| +                                       const PermissionRequestID& id); | 
| + | 
| protected: | 
| // Decide whether the permission should be granted. | 
| // Calls PermissionDecided if permission can be decided non-interactively, | 
| @@ -98,6 +103,10 @@ class PermissionContextBase : public KeyedService { | 
| // Return an instance of the infobar queue controller, creating it if needed. | 
| PermissionQueueController* GetQueueController(); | 
|  | 
| +  // KeyedService: | 
| +  // Called when the associated profile is destroyed. | 
| +  virtual void Shutdown() OVERRIDE; | 
| + | 
| private: | 
| void UpdateContentSetting( | 
| const GURL& requesting_origin, | 
| @@ -113,6 +122,7 @@ class PermissionContextBase : public KeyedService { | 
| scoped_ptr<PermissionQueueController> permission_queue_controller_; | 
| base::ScopedPtrHashMap<std::string, PermissionBubbleRequest> | 
| pending_bubbles_; | 
| +  bool shutting_down_; | 
| }; | 
|  | 
| #endif  // CHROME_BROWSER_CONTENT_SETTINGS_PERMISSION_CONTEXT_BASE_H_ | 
|  |