Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All Rights Reserved. |
| 3 * Copyright (C) 2009 Torch Mobile, Inc. | 3 * Copyright (C) 2009 Torch Mobile, Inc. |
| 4 * Copyright 2010, The Android Open Source Project | 4 * Copyright 2010, The Android Open Source Project |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| 23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 26 */ | 26 */ |
| 27 | 27 |
| 28 #include "config.h" | 28 #include "config.h" |
| 29 #include "modules/geolocation/Geolocation.h" | 29 #include "modules/geolocation/Geolocation.h" |
| 30 | 30 |
| 31 #include "core/dom/Document.h" | 31 #include "core/dom/Document.h" |
| 32 #include "core/frame/UseCounter.h" | |
| 32 #include "modules/geolocation/Coordinates.h" | 33 #include "modules/geolocation/Coordinates.h" |
| 33 #include "modules/geolocation/GeolocationController.h" | 34 #include "modules/geolocation/GeolocationController.h" |
| 34 #include "modules/geolocation/GeolocationError.h" | 35 #include "modules/geolocation/GeolocationError.h" |
| 35 #include "modules/geolocation/GeolocationPosition.h" | 36 #include "modules/geolocation/GeolocationPosition.h" |
| 36 #include "wtf/CurrentTime.h" | 37 #include "wtf/CurrentTime.h" |
| 37 | 38 |
| 38 namespace blink { | 39 namespace blink { |
| 39 | 40 |
| 40 static const char permissionDeniedErrorMessage[] = "User denied Geolocation"; | 41 static const char permissionDeniedErrorMessage[] = "User denied Geolocation"; |
| 41 static const char failedToStartServiceErrorMessage[] = "Failed to start Geolocat ion service"; | 42 static const char failedToStartServiceErrorMessage[] = "Failed to start Geolocat ion service"; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 130 { | 131 { |
| 131 LocalFrame* frame = this->frame(); | 132 LocalFrame* frame = this->frame(); |
| 132 if (!frame) | 133 if (!frame) |
| 133 return 0; | 134 return 0; |
| 134 | 135 |
| 135 m_lastPosition = createGeoposition(GeolocationController::from(frame)->lastP osition()); | 136 m_lastPosition = createGeoposition(GeolocationController::from(frame)->lastP osition()); |
| 136 | 137 |
| 137 return m_lastPosition.get(); | 138 return m_lastPosition.get(); |
| 138 } | 139 } |
| 139 | 140 |
| 141 void Geolocation::RecordOriginTypeAccess() | |
| 142 { | |
| 143 ASSERT(frame()); | |
| 144 | |
| 145 Document* document = frame()->document(); | |
| 146 if (!document) | |
|
Peter Beverloo
2014/10/02 14:58:24
When would there not be a document if we have the
mlamouri (slow - plz ping)
2014/10/02 15:44:54
Done.
| |
| 147 return; | |
| 148 | |
| 149 // It is required but canAccessFeatureRequiringSecureOrigin() but isn't | |
| 150 // actually used. This could be used later if a warning is shown in the | |
| 151 // developer console. | |
| 152 String insecureOriginMsg; | |
| 153 UseCounter::Feature counter = document->securityOrigin()->canAccessFeatureRe quiringSecureOrigin(insecureOriginMsg) | |
| 154 ? UseCounter::GeolocationSecureOrigin : UseCounter::GeolocationInsecureO rigin; | |
| 155 UseCounter::count(document, counter); | |
|
Peter Beverloo
2014/10/02 14:58:24
I would much prefer this code to use SecurityOrigi
Mike West
2014/10/02 15:04:11
We're using canAccessFeature* for security checks
| |
| 156 } | |
| 157 | |
| 140 void Geolocation::getCurrentPosition(PositionCallback* successCallback, Position ErrorCallback* errorCallback, const Dictionary& options) | 158 void Geolocation::getCurrentPosition(PositionCallback* successCallback, Position ErrorCallback* errorCallback, const Dictionary& options) |
| 141 { | 159 { |
| 142 if (!frame()) | 160 if (!frame()) |
| 143 return; | 161 return; |
| 144 | 162 |
| 163 RecordOriginTypeAccess(); | |
| 164 | |
| 145 GeoNotifier* notifier = GeoNotifier::create(this, successCallback, errorCall back, PositionOptions::create(options)); | 165 GeoNotifier* notifier = GeoNotifier::create(this, successCallback, errorCall back, PositionOptions::create(options)); |
| 146 startRequest(notifier); | 166 startRequest(notifier); |
| 147 | 167 |
| 148 m_oneShots.add(notifier); | 168 m_oneShots.add(notifier); |
| 149 } | 169 } |
| 150 | 170 |
| 151 int Geolocation::watchPosition(PositionCallback* successCallback, PositionErrorC allback* errorCallback, const Dictionary& options) | 171 int Geolocation::watchPosition(PositionCallback* successCallback, PositionErrorC allback* errorCallback, const Dictionary& options) |
| 152 { | 172 { |
| 153 if (!frame()) | 173 if (!frame()) |
| 154 return 0; | 174 return 0; |
| 155 | 175 |
| 176 RecordOriginTypeAccess(); | |
| 177 | |
| 156 GeoNotifier* notifier = GeoNotifier::create(this, successCallback, errorCall back, PositionOptions::create(options)); | 178 GeoNotifier* notifier = GeoNotifier::create(this, successCallback, errorCall back, PositionOptions::create(options)); |
| 157 startRequest(notifier); | 179 startRequest(notifier); |
| 158 | 180 |
| 159 int watchID; | 181 int watchID; |
| 160 // Keep asking for the next id until we're given one that we don't already h ave. | 182 // Keep asking for the next id until we're given one that we don't already h ave. |
| 161 do { | 183 do { |
| 162 watchID = executionContext()->circularSequentialID(); | 184 watchID = executionContext()->circularSequentialID(); |
| 163 } while (!m_watchers.add(watchID, notifier)); | 185 } while (!m_watchers.add(watchID, notifier)); |
| 164 return watchID; | 186 return watchID; |
| 165 } | 187 } |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 516 notifier->startTimer(); | 538 notifier->startTimer(); |
| 517 else | 539 else |
| 518 notifier->setFatalError(PositionError::create(PositionError::POS ITION_UNAVAILABLE, failedToStartServiceErrorMessage)); | 540 notifier->setFatalError(PositionError::create(PositionError::POS ITION_UNAVAILABLE, failedToStartServiceErrorMessage)); |
| 519 } else { | 541 } else { |
| 520 notifier->setFatalError(PositionError::create(PositionError::PERMISS ION_DENIED, permissionDeniedErrorMessage)); | 542 notifier->setFatalError(PositionError::create(PositionError::PERMISS ION_DENIED, permissionDeniedErrorMessage)); |
| 521 } | 543 } |
| 522 } | 544 } |
| 523 } | 545 } |
| 524 | 546 |
| 525 } // namespace blink | 547 } // namespace blink |
| OLD | NEW |