Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: content/browser/geolocation/geolocation_service_impl.cc

Issue 628773003: Partially convert geolocation IPC to Mojo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Response to review, fix gn build Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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 "content/browser/geolocation/geolocation_service_impl.h"
6
7 #include "base/bind.h"
8 #include "base/metrics/histogram.h"
9 #include "content/browser/geolocation/geolocation_service_impl_context.h"
10 #include "content/public/common/mojo_geoposition.mojom.h"
11
12 namespace content {
13
14 namespace {
15
16 // Geoposition error codes for reporting in UMA.
17 enum GeopositionErrorCode {
18 // NOTE: Do not renumber these as that would confuse interpretation of
19 // previously logged data. When making changes, also update the enum list
20 // in tools/metrics/histograms/histograms.xml to keep it in sync.
21
22 // There was no error.
23 GEOPOSITION_ERROR_CODE_NONE = 0,
24
25 // User denied use of geolocation.
26 GEOPOSITION_ERROR_CODE_PERMISSION_DENIED = 1,
27
28 // Geoposition could not be determined.
29 GEOPOSITION_ERROR_CODE_POSITION_UNAVAILABLE = 2,
30
31 // Timeout.
32 GEOPOSITION_ERROR_CODE_TIMEOUT = 3,
33
34 // NOTE: Add entries only immediately above this line.
35 GEOPOSITION_ERROR_CODE_COUNT = 4
36 };
37
38 void RecordGeopositionErrorCode(Geoposition::ErrorCode error_code) {
39 GeopositionErrorCode code = GEOPOSITION_ERROR_CODE_NONE;
40 switch (error_code) {
41 case Geoposition::ERROR_CODE_NONE:
42 code = GEOPOSITION_ERROR_CODE_NONE;
43 break;
44 case Geoposition::ERROR_CODE_PERMISSION_DENIED:
45 code = GEOPOSITION_ERROR_CODE_PERMISSION_DENIED;
46 break;
47 case Geoposition::ERROR_CODE_POSITION_UNAVAILABLE:
48 code = GEOPOSITION_ERROR_CODE_POSITION_UNAVAILABLE;
49 break;
50 case Geoposition::ERROR_CODE_TIMEOUT:
51 code = GEOPOSITION_ERROR_CODE_TIMEOUT;
52 break;
53 }
54 UMA_HISTOGRAM_ENUMERATION("Geolocation.LocationUpdate.ErrorCode",
55 code,
56 GEOPOSITION_ERROR_CODE_COUNT);
57 }
58
59 } // namespace
60
61 // static
62 void GeolocationServiceImpl::Create(
63 GeolocationServiceImplContext* context,
64 const base::Closure& on_location_update_callback,
65 mojo::InterfaceRequest<GeolocationService> request) {
66 GeolocationServiceImpl* service =
67 new GeolocationServiceImpl(context, on_location_update_callback);
68 BindToRequest(service, &request);
69 }
70
71 GeolocationServiceImpl::GeolocationServiceImpl(
72 GeolocationServiceImplContext* context,
73 const base::Closure& on_location_update_callback)
74 : context_(context),
75 on_location_update_callback_(on_location_update_callback) {
76 context_->AddService(this);
77 }
78
79 GeolocationServiceImpl::~GeolocationServiceImpl() {
80 context_->RemoveService(this);
81 }
82
83 void GeolocationServiceImpl::PauseUpdates() {
84 geolocation_subscription_.reset();
85 }
86
87 void GeolocationServiceImpl::ResumeUpdates() {
88 StartListeningForUpdates();
89 }
90
91 void GeolocationServiceImpl::StartListeningForUpdates() {
92 geolocation_subscription_ =
93 GeolocationProvider::GetInstance()->AddLocationUpdateCallback(
94 base::Bind(&GeolocationServiceImpl::OnLocationUpdate,
95 base::Unretained(this)),
96 high_accuracy_);
97 }
98
99 void GeolocationServiceImpl::StartUpdating(bool high_accuracy) {
100 // TODO(blundell): What does this comment even mean?
Michael van Ouwerkerk 2014/10/08 14:13:07 I was thinking the same. The purpose of this histo
blundell 2014/10/09 08:32:52 I'm not sure what you're suggesting I do with the
101 // StartUpdating() can be invoked as a result of high-accuracy mode
102 // being enabled / disabled. No need to record the dispatcher again.
103 UMA_HISTOGRAM_BOOLEAN(
104 "Geolocation.GeolocationDispatcherHostImpl.EnableHighAccuracy",
Michael van Ouwerkerk 2014/10/08 14:13:08 I've chosen a terrible name for this histogram. St
blundell 2014/10/09 08:32:52 Acknowledged.
105 high_accuracy);
106 high_accuracy_ = high_accuracy;
107 StartListeningForUpdates();
108 }
109
110 void GeolocationServiceImpl::OnLocationUpdate(const Geoposition& position) {
111 RecordGeopositionErrorCode(position.error_code);
112 if (context_->paused())
113 return;
114
115 MojoGeopositionPtr geoposition(MojoGeoposition::New());
116 geoposition->valid = position.Validate();
117 geoposition->latitude = position.latitude;
118 geoposition->longitude = position.longitude;
119 geoposition->altitude = position.altitude;
120 geoposition->accuracy = position.accuracy;
121 geoposition->altitude_accuracy = position.altitude_accuracy;
122 geoposition->heading = position.heading;
123 geoposition->speed = position.speed;
124 geoposition->timestamp = position.timestamp.ToDoubleT();
125 geoposition->error_code = MojoGeoposition::ErrorCode(position.error_code);
126 geoposition->error_message = position.error_message;
127
128 on_location_update_callback_.Run();
129 client()->OnLocationUpdate(geoposition.Pass());
130 }
131
132 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698