geolocation_permission_context_android.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef CHROME_BROWSER_GEOLOCATION_GEOLOCATION_PERMISSION_CONTEXT_ANDROID_H_
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define CHROME_BROWSER_GEOLOCATION_GEOLOCATION_PERMISSION_CONTEXT_ANDROID_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/content_settings/permission_request_id.h"
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/geolocation/geolocation_permission_context.h"
10a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "url/gurl.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content {
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class WebContents;
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GoogleLocationSettingsHelper;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Android-specific geolocation permission flow, taking into account the
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Google Location Settings, if available.
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class GeolocationPermissionContextAndroid
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    : public GeolocationPermissionContext {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  explicit GeolocationPermissionContextAndroid(Profile* profile);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  struct PermissionRequestInfo {
27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    PermissionRequestInfo();
28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    PermissionRequestID id;
30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    GURL requesting_frame;
31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    bool user_gesture;
32a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    GURL embedder;
33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  };
34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  friend class GeolocationPermissionContext;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual ~GeolocationPermissionContextAndroid();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // GeolocationPermissionContext implementation:
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DecidePermission(content::WebContents* web_contents,
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const PermissionRequestID& id,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const GURL& requesting_frame,
43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                bool user_gesture,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const GURL& embedder,
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                const std::string& accept_button_label,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                base::Callback<void(bool)> callback) OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
48a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  virtual void PermissionDecided(const PermissionRequestID& id,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const GURL& requesting_frame,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const GURL& embedder,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 base::Callback<void(bool)> callback,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 bool allowed) OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void ProceedDecidePermission(content::WebContents* web_contents,
55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                               const PermissionRequestInfo& info,
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                               const std::string& accept_button_label,
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                               base::Callback<void(bool)> callback);
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<GoogleLocationSettingsHelper> google_location_settings_helper_;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private:
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void CheckMasterLocation(content::WebContents* web_contents,
63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                           const PermissionRequestInfo& info,
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                           base::Callback<void(bool)> callback);
65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(GeolocationPermissionContextAndroid);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif  // CHROME_BROWSER_GEOLOCATION_GEOLOCATION_PERMISSION_CONTEXT_ANDROID_H_
70