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

Side by Side Diff: blimp/client/core/geolocation/geolocation_feature.cc

Issue 2624903006: Remove all blimp client code. (Closed)
Patch Set: Update buildbot configuration Created 3 years, 11 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 2016 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 "blimp/client/core/geolocation/geolocation_feature.h"
6
7 #include <memory>
8 #include <string>
9 #include <utility>
10
11 #include "blimp/common/create_blimp_message.h"
12 #include "blimp/common/proto/blimp_message.pb.h"
13 #include "device/geolocation/geoposition.h"
14 #include "device/geolocation/location_provider.h"
15 #include "net/base/net_errors.h"
16
17 namespace blimp {
18 namespace client {
19
20 GeolocationFeature::GeolocationFeature(
21 std::unique_ptr<device::LocationProvider> location_provider)
22 : location_provider_(std::move(location_provider)) {
23 location_provider_->SetUpdateCallback(base::Bind(
24 &GeolocationFeature::OnLocationUpdate, base::Unretained(this)));
25 }
26
27 GeolocationFeature::~GeolocationFeature() {}
28
29 void GeolocationFeature::set_outgoing_message_processor(
30 std::unique_ptr<BlimpMessageProcessor> processor) {
31 outgoing_message_processor_ = std::move(processor);
32 am_sending_message_ = false;
33 }
34
35 void GeolocationFeature::ProcessMessage(
36 std::unique_ptr<BlimpMessage> message,
37 const net::CompletionCallback& callback) {
38 DCHECK_EQ(BlimpMessage::kGeolocation, message->feature_case());
39
40 int result = net::OK;
41 const GeolocationMessage& geolocation_message = message->geolocation();
42 switch (geolocation_message.type_case()) {
43 case GeolocationMessage::kSetInterestLevel:
44 SetInterestLevel(geolocation_message.set_interest_level().level());
45 break;
46 case GeolocationMessage::kRequestRefresh:
47 location_provider_->OnPermissionGranted();
48 break;
49 case GeolocationMessage::kCoordinates:
50 case GeolocationMessage::kError:
51 case GeolocationMessage::TYPE_NOT_SET:
52 result = net::ERR_UNEXPECTED;
53 break;
54 }
55
56 if (!callback.is_null()) {
57 callback.Run(result);
58 }
59 }
60
61 void GeolocationFeature::OnLocationUpdate(
62 const device::LocationProvider* location_provider,
63 const device::Geoposition& position) {
64 DCHECK_EQ(location_provider_.get(), location_provider);
65
66 if (!am_sending_message_) {
67 switch (position.error_code) {
68 case device::Geoposition::ERROR_CODE_NONE:
69 SendGeolocationPositionMessage(position);
70 break;
71 case device::Geoposition::ErrorCode::ERROR_CODE_PERMISSION_DENIED:
72 SendGeolocationErrorMessage(GeolocationErrorMessage::PERMISSION_DENIED,
73 position.error_message);
74 break;
75 case device::Geoposition::ErrorCode::ERROR_CODE_POSITION_UNAVAILABLE:
76 SendGeolocationErrorMessage(
77 GeolocationErrorMessage::POSITION_UNAVAILABLE,
78 position.error_message);
79 break;
80 case device::Geoposition::ErrorCode::ERROR_CODE_TIMEOUT:
81 SendGeolocationErrorMessage(GeolocationErrorMessage::TIMEOUT,
82 position.error_message);
83 break;
84 }
85 } else {
86 need_to_send_message_ = true;
87 }
88 }
89
90 void GeolocationFeature::SetInterestLevel(
91 GeolocationSetInterestLevelMessage::Level level) {
92 switch (level) {
93 case GeolocationSetInterestLevelMessage::HIGH_ACCURACY:
94 location_provider_->StartProvider(true);
95 break;
96 case GeolocationSetInterestLevelMessage::LOW_ACCURACY:
97 location_provider_->StartProvider(false);
98 break;
99 case GeolocationSetInterestLevelMessage::NO_INTEREST:
100 location_provider_->StopProvider();
101 break;
102 }
103 }
104
105 void GeolocationFeature::SendGeolocationPositionMessage(
106 const device::Geoposition& position) {
107 GeolocationMessage* geolocation_message = nullptr;
108 std::unique_ptr<BlimpMessage> blimp_message =
109 CreateBlimpMessage(&geolocation_message);
110
111 GeolocationCoordinatesMessage* coordinates =
112 geolocation_message->mutable_coordinates();
113 coordinates->set_latitude(position.latitude);
114 coordinates->set_longitude(position.longitude);
115 coordinates->set_altitude(position.altitude);
116 coordinates->set_accuracy(position.accuracy);
117 coordinates->set_altitude_accuracy(position.altitude_accuracy);
118 coordinates->set_heading(position.heading);
119 coordinates->set_speed(position.speed);
120
121 am_sending_message_ = true;
122 outgoing_message_processor_->ProcessMessage(
123 std::move(blimp_message),
124 base::Bind(&GeolocationFeature::OnSendComplete, base::Unretained(this)));
125 }
126
127 void GeolocationFeature::SendGeolocationErrorMessage(
128 GeolocationErrorMessage::ErrorCode error_code,
129 const std::string& error_message) {
130 GeolocationMessage* geolocation_message = nullptr;
131 std::unique_ptr<BlimpMessage> blimp_message =
132 CreateBlimpMessage(&geolocation_message);
133
134 GeolocationErrorMessage* error = geolocation_message->mutable_error();
135 error->set_error_code(error_code);
136 error->set_error_message(error_message);
137
138 am_sending_message_ = true;
139 outgoing_message_processor_->ProcessMessage(
140 std::move(blimp_message),
141 base::Bind(&GeolocationFeature::OnSendComplete, base::Unretained(this)));
142 }
143
144 void GeolocationFeature::OnSendComplete(int result) {
145 am_sending_message_ = false;
146 if (need_to_send_message_) {
147 device::Geoposition new_position = location_provider_->GetPosition();
148 if (new_position.Validate()) {
149 OnLocationUpdate(location_provider_.get(), new_position);
150 }
151 need_to_send_message_ = false;
152 }
153 }
154
155 } // namespace client
156 } // namespace blimp
OLDNEW
« no previous file with comments | « blimp/client/core/geolocation/geolocation_feature.h ('k') | blimp/client/core/geolocation/geolocation_feature_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698