// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_GEOLOCATION_GEOLOCATION_PERMISSION_CONTEXT_H_ #define CHROME_BROWSER_GEOLOCATION_GEOLOCATION_PERMISSION_CONTEXT_H_ #pragma once #include "base/basictypes.h" #include "base/ref_counted.h" #include "base/scoped_ptr.h" class GeolocationInfoBarQueueController; class GeolocationPermissionContext; class GURL; class InfoBarDelegate; class Profile; class RenderViewHost; class TabContents; // GeolocationPermissionContext manages Geolocation permissions flow, // and delegates UI handling via GeolocationInfoBarQueueController. // It always notifies the requesting render_view asynchronously via // ViewMsg_Geolocation_PermissionSet. class GeolocationPermissionContext : public base::RefCountedThreadSafe<GeolocationPermissionContext> { public: explicit GeolocationPermissionContext(Profile* profile); // The render is requesting permission to use Geolocation. // Response will be sent asynchronously as ViewMsg_Geolocation_PermissionSet. void RequestGeolocationPermission( int render_process_id, int render_view_id, int bridge_id, const GURL& requesting_frame); // The render is cancelling a pending permission request. void CancelGeolocationPermissionRequest( int render_process_id, int render_view_id, int bridge_id, const GURL& requesting_frame); // Notifies whether or not the corresponding bridge is allowed to use // geolocation via ViewMsg_Geolocation_PermissionSet. void NotifyPermissionSet( int render_process_id, int render_view_id, int bridge_id, const GURL& requesting_frame, bool allowed); private: friend class base::RefCountedThreadSafe<GeolocationPermissionContext>; virtual ~GeolocationPermissionContext(); // Calls GeolocationArbitrator::OnPermissionGranted. void NotifyArbitratorPermissionGranted(const GURL& requesting_frame); // Removes any pending InfoBar request. void CancelPendingInfoBarRequest( int render_process_id, int render_view_id, int bridge_id); // This should only be accessed from the UI thread. Profile* const profile_; scoped_ptr<GeolocationInfoBarQueueController> geolocation_infobar_queue_controller_; DISALLOW_COPY_AND_ASSIGN(GeolocationPermissionContext); }; #endif // CHROME_BROWSER_GEOLOCATION_GEOLOCATION_PERMISSION_CONTEXT_H_