15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_RENDERER_GEOLOCATION_DISPATCHER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_RENDERER_GEOLOCATION_DISPATCHER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "content/public/renderer/render_frame_observer.h"
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebGeolocationClient.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebGeolocationController.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebGeolocationController;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebGeolocationPermissionRequest;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebGeolocationPermissionRequestManager;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebGeolocationPosition;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct Geoposition;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GeolocationDispatcher is a delegate for Geolocation messages used by
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebKit.
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// It's the complement of GeolocationDispatcherHost.
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class GeolocationDispatcher : public RenderFrameObserver,
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              public blink::WebGeolocationClient {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  explicit GeolocationDispatcher(RenderFrame* render_frame);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~GeolocationDispatcher();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // RenderFrame::Observer implementation.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebGeolocationClient
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void startUpdating();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void stopUpdating();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void setEnableHighAccuracy(bool enable_high_accuracy);
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void setController(blink::WebGeolocationController* controller);
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool lastPosition(blink::WebGeolocationPosition& position);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void requestPermission(
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebGeolocationPermissionRequest& permissionRequest);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void cancelPermissionRequest(
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebGeolocationPermissionRequest& permissionRequest);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Permission for using geolocation has been set.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnPermissionSet(int bridge_id, bool is_allowed);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We have an updated geolocation position or error code.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnPositionUpdated(const content::Geoposition& geoposition);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  scoped_ptr<blink::WebGeolocationController> controller_;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<blink::WebGeolocationPermissionRequestManager>
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pending_permissions_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool enable_high_accuracy_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool updating_;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_RENDERER_GEOLOCATION_DISPATCHER_H_
64