afb213cf34353c11985c078dda19866207ee32e1
[platform/framework/web/crosswalk.git] / src / chrome / browser / geolocation / chrome_geolocation_permission_context_android.cc
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/geolocation/chrome_geolocation_permission_context_android.h"
6
7 #include "base/prefs/pref_service.h"
8 #include "chrome/browser/android/google_location_settings_helper.h"
9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/common/pref_names.h"
11 #include "content/public/browser/browser_thread.h"
12
13 ChromeGeolocationPermissionContextAndroid::
14     ChromeGeolocationPermissionContextAndroid(Profile* profile)
15     : ChromeGeolocationPermissionContext(profile),
16       google_location_settings_helper_(
17           GoogleLocationSettingsHelper::Create()) {
18 }
19
20 ChromeGeolocationPermissionContextAndroid::
21     ~ChromeGeolocationPermissionContextAndroid() {
22 }
23
24 void ChromeGeolocationPermissionContextAndroid::DecidePermission(
25     const PermissionRequestID& id,
26     const GURL& requesting_frame,
27     const GURL& embedder,
28     base::Callback<void(bool)> callback) {
29   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
30
31   // Check to see if the feature in its entirety has been disabled.
32   // This must happen before other services (e.g. tabs, extensions)
33   // get an opportunity to allow the geolocation request.
34   if (!google_location_settings_helper_->IsMasterLocationSettingEnabled()) {
35     PermissionDecided(id, requesting_frame, embedder, callback, false);
36     return;
37   }
38
39   ChromeGeolocationPermissionContext::DecidePermission(id, requesting_frame,
40                                                        embedder, callback);
41 }
42
43 void ChromeGeolocationPermissionContextAndroid::PermissionDecided(
44     const PermissionRequestID& id,
45     const GURL& requesting_frame,
46     const GURL& embedder,
47     base::Callback<void(bool)> callback,
48     bool allowed) {
49   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
50   // If Google Apps Location setting is turned off then we ignore
51   // the 'allow' website setting for this site and instead show
52   // the infobar to go back to the 'settings' to turn it back on.
53   if (allowed &&
54       !google_location_settings_helper_->IsGoogleAppsLocationSettingEnabled()) {
55     QueueController()->CreateInfoBarRequest(id, requesting_frame, embedder,
56                                             callback);
57     return;
58   }
59
60   ChromeGeolocationPermissionContext::PermissionDecided(
61       id, requesting_frame, embedder, callback, allowed);
62 }