1// Copyright (c) 2013 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#ifndef CHROME_TEST_CHROMEDRIVER_CHROME_GEOLOCATION_OVERRIDE_MANAGER_H_
6#define CHROME_TEST_CHROMEDRIVER_CHROME_GEOLOCATION_OVERRIDE_MANAGER_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/compiler_specific.h"
12#include "base/memory/scoped_ptr.h"
13#include "chrome/test/chromedriver/chrome/devtools_event_listener.h"
14
15namespace base {
16class DictionaryValue;
17}
18
19class DevToolsClient;
20struct Geoposition;
21class Status;
22
23// Overrides the geolocation, if requested, for the duration of the
24// given |DevToolsClient|'s lifetime.
25class GeolocationOverrideManager : public DevToolsEventListener {
26 public:
27  explicit GeolocationOverrideManager(DevToolsClient* client);
28  virtual ~GeolocationOverrideManager();
29
30  Status OverrideGeolocation(const Geoposition& geoposition);
31
32  // Overridden from DevToolsEventListener:
33  virtual Status OnConnected(DevToolsClient* client) OVERRIDE;
34  virtual Status OnEvent(DevToolsClient* client,
35                         const std::string& method,
36                         const base::DictionaryValue& params) OVERRIDE;
37
38 private:
39  Status ApplyOverrideIfNeeded();
40
41  DevToolsClient* client_;
42  scoped_ptr<Geoposition> overridden_geoposition_;
43
44  DISALLOW_COPY_AND_ASSIGN(GeolocationOverrideManager);
45};
46
47#endif  // CHROME_TEST_CHROMEDRIVER_CHROME_GEOLOCATION_OVERRIDE_MANAGER_H_
48