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

Side by Side Diff: content/renderer/geolocation_dispatcher.cc

Issue 1948033003: Convert most geolocation layout tests to use a JS mock implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permission-disconnect
Patch Set: Created 4 years, 7 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/geolocation_dispatcher.h" 5 #include "content/renderer/geolocation_dispatcher.h"
6 6
7 #include "content/public/common/geoposition.h" 7 #include "content/public/common/geoposition.h"
8 #include "content/renderer/render_view_impl.h" 8 #include "content/renderer/render_view_impl.h"
9 #include "third_party/WebKit/public/platform/WebString.h" 9 #include "third_party/WebKit/public/platform/WebString.h"
10 #include "third_party/WebKit/public/web/WebGeolocationPermissionRequest.h" 10 #include "third_party/WebKit/public/web/WebGeolocationPermissionRequest.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 // would have to fetch it synchronously to give a good value here. The 65 // would have to fetch it synchronously to give a good value here. The
66 // WebCore::GeolocationController already caches the last position it 66 // WebCore::GeolocationController already caches the last position it
67 // receives, so there is not much benefit to more position caching here. 67 // receives, so there is not much benefit to more position caching here.
68 return false; 68 return false;
69 } 69 }
70 70
71 // TODO(jknotten): Change the messages to use a security origin, so no 71 // TODO(jknotten): Change the messages to use a security origin, so no
72 // conversion is necessary. 72 // conversion is necessary.
73 void GeolocationDispatcher::requestPermission( 73 void GeolocationDispatcher::requestPermission(
74 const WebGeolocationPermissionRequest& permissionRequest) { 74 const WebGeolocationPermissionRequest& permissionRequest) {
75 num_pending_permission_requests_++;
75 if (!permission_service_.get()) { 76 if (!permission_service_.get()) {
76 render_frame()->GetServiceRegistry()->ConnectToRemoteService( 77 render_frame()->GetServiceRegistry()->ConnectToRemoteService(
77 mojo::GetProxy(&permission_service_)); 78 mojo::GetProxy(&permission_service_));
78 } 79 }
79 80
80 int permission_request_id = pending_permissions_->add(permissionRequest); 81 int permission_request_id = pending_permissions_->add(permissionRequest);
81 82
82 permission_service_->RequestPermission( 83 permission_service_->RequestPermission(
83 blink::mojom::PermissionName::GEOLOCATION, 84 blink::mojom::PermissionName::GEOLOCATION,
84 permissionRequest.getSecurityOrigin().toString().utf8(), 85 permissionRequest.getSecurityOrigin().toString().utf8(),
85 base::Bind(&GeolocationDispatcher::OnPermissionSet, 86 base::Bind(&GeolocationDispatcher::OnPermissionSet,
86 base::Unretained(this), permission_request_id)); 87 base::Unretained(this), permission_request_id));
87 } 88 }
88 89
89 void GeolocationDispatcher::cancelPermissionRequest( 90 void GeolocationDispatcher::cancelPermissionRequest(
90 const blink::WebGeolocationPermissionRequest& permissionRequest) { 91 const blink::WebGeolocationPermissionRequest& permissionRequest) {
91 int permission_request_id; 92 int permission_request_id;
92 pending_permissions_->remove(permissionRequest, permission_request_id); 93 pending_permissions_->remove(permissionRequest, permission_request_id);
94 if (--num_pending_permission_requests_ == 0)
95 permission_service_.reset();
93 } 96 }
94 97
95 // Permission for using geolocation has been set. 98 // Permission for using geolocation has been set.
96 void GeolocationDispatcher::OnPermissionSet( 99 void GeolocationDispatcher::OnPermissionSet(
97 int permission_request_id, 100 int permission_request_id,
98 blink::mojom::PermissionStatus status) { 101 blink::mojom::PermissionStatus status) {
99 WebGeolocationPermissionRequest permissionRequest; 102 WebGeolocationPermissionRequest permissionRequest;
100 if (!pending_permissions_->remove(permission_request_id, permissionRequest)) 103 if (!pending_permissions_->remove(permission_request_id, permissionRequest))
101 return; 104 return;
102 105
106 if (--num_pending_permission_requests_ == 0)
107 permission_service_.reset();
108
103 permissionRequest.setIsAllowed(status == 109 permissionRequest.setIsAllowed(status ==
104 blink::mojom::PermissionStatus::GRANTED); 110 blink::mojom::PermissionStatus::GRANTED);
105 } 111 }
106 112
107 void GeolocationDispatcher::QueryNextPosition() { 113 void GeolocationDispatcher::QueryNextPosition() {
108 DCHECK(geolocation_service_); 114 DCHECK(geolocation_service_);
109 geolocation_service_->QueryNextPosition( 115 geolocation_service_->QueryNextPosition(
110 base::Bind(&GeolocationDispatcher::OnPositionUpdate, 116 base::Bind(&GeolocationDispatcher::OnPositionUpdate,
111 base::Unretained(this))); 117 base::Unretained(this)));
112 } 118 }
(...skipping 29 matching lines...) Expand all
142 default: 148 default:
143 NOTREACHED() << geoposition->error_code; 149 NOTREACHED() << geoposition->error_code;
144 return; 150 return;
145 } 151 }
146 controller_->errorOccurred(WebGeolocationError( 152 controller_->errorOccurred(WebGeolocationError(
147 code, blink::WebString::fromUTF8(geoposition->error_message))); 153 code, blink::WebString::fromUTF8(geoposition->error_message)));
148 } 154 }
149 } 155 }
150 156
151 } // namespace content 157 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698